home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
JCSM Shareware Collection 1996 September
/
JCSM Shareware Collection (JCS Distribution) (September 1996).ISO
/
prgtools
/
vndinf10.zip
/
STANDARD.DOC
< prev
next >
Wrap
Text File
|
1994-02-28
|
162KB
|
2,688 lines
/*=================================================================*/
/* VENDINFO File-Format and Tools Standard */
/* Version 1.00, 2/28/94 */
/* */
/* Copyright 1993-4, Rams' Island Software, Parker CO 80134-5904 */
/*=================================================================*/
/*---------------------------------------- about the document -----*/
/* This "document" will probably look a bit strange to most eyes. */
/* That's because it's doing double duty. It serves as a */
/* human-readable standard for the file formats and tools */
/* behavior associated with the VENDINFO system. It also serves */
/* as a C and C++ "include file", providing the necessary record */
/* definitions and other information in compiler-readable form. */
/* */
/* This unusual presentation is not being done out of laziness */
/* (in fact, you'll notice that a fair amount of work has been */
/* done to make the document serve both purposes well). Rather, */
/* it is being done in the interest of accuracy and error */
/* minimization. Because the compiler-readable portion of the */
/* standard will have been verified by constructing actual tools */
/* to create and use the records, the document should be rather */
/* unambiguous, and free from at least some of the sorts of */
/* errors that might have resulted from separating it into two */
/* separate (human and compiler) parts and attempting to keep */
/* them synchronized. */
/*-----------------------------------------------------------------*/
/*------------------------------------------- public standard -----*/
/* This VENDINFO standard is a copyrighted work. That has been */
/* done to insure that the development of the standard is well */
/* controlled, and that multiple variations are prevented. Many */
/* standards in the computer industry have been damaged or */
/* delayed by the existence of multiple, competing versions. */
/* It is in the interest of the entire industry that we are */
/* attempting to avoid such a development here. This standard */
/* has been developed "in public", with opportunities for public */
/* comment on its general ideas and specific content. That will */
/* continue to be the case. */
/* */
/* This standard is made available for free use by all parties, */
/* including the development of tools other than -- or even in */
/* competition with -- those of the developers of the standard. */
/* This standard may also be distributed freely, provided it is */
/* in its original form, not altered in any way. */
/*-----------------------------------------------------------------*/
/*------------------------------------- contacting the author -----*/
/* The author can be reached in any of the following ways. */
/* */
/* By mail: By electronic means: */
/* H. Rudy Ramsey CompuServe: 76244,324 */
/* Rams' Island Software FidoNet: 1:104/333 */
/* 7644 E. Lakecliff Way RIME: RAMSISLE (1235) */
/* Parker, CO 80134-5904 (USA) Internet: */
/* 76244.324@compuserve.com */
/* By phone: 303-841-2848 BBS: 303-841-6269 */
/*-----------------------------------------------------------------*/
/*****************************/
/* Background */
/*****************************/
/*------------------------------------------------ background -----*/
/* The VENDINFO system allows the author/publisher of a software */
/* package to communicate a great deal of information to the */
/* prospective distributors of that package. The record */
/* containing this information is included with the distributed */
/* package. The record is highly structured, compressed, and */
/* useable via automated tools for convenience and reliability. */
/* */
/* It is expected that the VENDINFO.DIZ record will replace the */
/* VENDOR.DOC, SYSOP.DOC, LICENSE.DOC, WARRANTY.DOC, */
/* SITELICE.DOC, FILE_ID.DIZ, and DESC.SDI commonly found in */
/* shareware and public-domain software packages. It may */
/* eventually replace READ-ME.DOC and similar files, as well. */
/* */
/* The VENDINFO system includes this file-format standard, which */
/* defines the structure of the main VENDINFO.DIZ record and a */
/* few minor related records, and it includes a number of tools */
/* for creating and using the record. It includes a centralized */
/* product registry, which is a repository for VENDINFO records */
/* and related material about currently available products. It */
/* also includes a software developer's library, for use in the */
/* construction of BBS software, vendor database software, etc. */
/* */
/* The VENDINFO system includes the following tools: */
/* VendEdit -- Editor used by software author/publisher to */
/* produce VENDINFO record and, if desired, to */
/* "brand" executables with product information. */
/* VendPrcs -- Processor used by distributor to extract, and to */
/* make decisions based on, VENDINFO information. */
/* VendView -- VENDINFO record viewer for end users. */
/* */
/* For more detailed information about the overall VENDINFO */
/* concept, see the publicly distributed information package */
/* VNDINFxx.ZIP (xx is the version number, currently 10), which */
/* is probably available from the same source from which you */
/* obtained this document, or contact Rams' Island Software. */
/*-----------------------------------------------------------------*/
/*----------------------------------- a comment on complexity -----*/
/* A common initial reaction to the VENDINFO file format is that */
/* it's rather complex. This is true. There is a great deal of */
/* information to be conveyed from authors to distributors and */
/* to end users, and to pretend otherwise would be to settle for */
/* much less than the actually achievable benefits of VENDINFO. */
/* The key is not to strive for an artificially simple VENDINFO */
/* record, but to surround that record with tools that make it */
/* easy to use. Those who have seen the toolset appear to be in */
/* nearly unanimous agreement that this has been accomplished. */
/*-----------------------------------------------------------------*/
/*-- please ignore the next few lines; they're for the compiler ---*/
#if !defined (__VENDINFO_H) /* excludes entire file if defined */
#define __VENDINFO_H
#define VENDINFO_VERSION "1.00"
#define VENDINFO_VERSION_NUMERIC 100
#define VENDINFO_VERSION_DATE "2/28/94"
#ifdef VENDINFO_MAIN
#define EXTERN
#else
#define EXTERN extern
#endif
/***************************************/
/* Conventions Used in This Standard */
/***************************************/
/*---------------------------------------- naming conventions -----*/
/* The naming conventions used in this standard and in the */
/* software developer's library are intended to insure that the */
/* programmer can tell the nature of an identifier (variable */
/* name, function, bit mask, etc.) from its name, and can also */
/* easily recognize those identifiers that are part of VENDINFO, */
/* to avoid confusing them with others that are part of his/her */
/* own program. Lexical conventions for names are: */
/* vibName -- bit mask (where "Name" can be anything). These */
/* should generally be used by ANDing them with the */
/* appropriate variable. */
/* vivName -- preprocessor value other than bit mask. These */
/* should generally be used in equality tests (e.g., */
/* "=="), or as array indexes. */
/* vifName -- function. */
/* vidName -- data (generally, a variable in the VENDINFO */
/* structure). */
/* vimName -- preprocessor macro (used in library, not in */
/* file-format standard per se) */
/* viName -- data type used within main record (may be */
/* structure or special use of ordinary type). */
/*-----------------------------------------------------------------*/
/*----------------------------------------- "shorthand" names -----*/
/* Each field of the VENDINFO record has associated with it both */
/* a "shorthand" name and a data type. The shorthand name is */
/* intended for use in testing or extracting field values by */
/* means of the VendPrcs processor or other such tools. For */
/* example, one might extract the short product name using the */
/* DOS command: */
/* vendprcs VENDINFO.DIZ -xpp */
/* where "x" represents extraction, and "pp" is the shorthand */
/* string that represents the product name field. */
/* */
/* The shorthand strings used to name the various fields are a */
/* part of this standard. Wherever a field is defined in the */
/* later sections of this standard, a comment will contain the */
/* shorthand name associated with the field, as well as an */
/* indication of its data type. For example, the product name */
/* field definition: */
/* char vidProdName[16]; ** pp s ** */
/* contains a comment actually shown as: */
/* pp s */
/* This comment indicates that the shorthand name of this field */
/* is "pp", and that it is of type "s". Types are: */
/* b -- boolean */
/* d -- date */
/* n -- number (integer) */
/* p -- price (format 99.99 or 999.99) */
/* s -- string (usually accessed as one line of text) */
/* t -- text block (accessed as multiple lines of text, */
/* each of which "behaves" as a string). May be stored */
/* as string, string array, or "TextBlock". */
/* Where internal structures are used, a question mark indicates */
/* a placeholder character. For example, in the author section, */
/* viElectAddr elec; ** ae? ** */
/* the author electronic addresses will have shorthand names */
/* consisting of "ae", followed by an additional character found */
/* in the documentation of the viElectAddr structure. */
/*-----------------------------------------------------------------*/
/**************************************/
/* VENDINFO Record and File Types */
/**************************************/
/*----------------------------------------- VENDINFO.DIZ file -----*/
/* The main data object used in the VENDINFO system is the */
/* VENDINFO.DIZ file. This file contains a human-readable text */
/* section in the front (terminated by 0x1A, also known as ^Z). */
/* This text section contains a brief outline of major */
/* information about the product, followed by paragraphs devoted */
/* to information about warranty, trial use and distribution */
/* licenses, a "packing list" of files in the package, etc. */
/* Additional information can be provided by the author. */
/* */
/* Following that section is a compressed data record containing */
/* comprehensive information about the product and version, */
/* author, ordering, technical support, prices and benefits, */
/* and distribution policies. */
/*-----------------------------------------------------------------*/
/*------------------------------- secondary VENDINFO.DIZ file -----*/
/* In multipart products (i.e., products packaged in more than */
/* one compressed file), only the first package contains a */
/* complete VENDINFO.DIZ file. Subsequent parts contain a */
/* complete data record (to allow independent automatic */
/* processing of each package), but highly abbreviated human- */
/* readable text. */
/*-----------------------------------------------------------------*/
/*---------------------------------- brief executable records -----*/
/* The VendEdit editor will have the capability of appending, to */
/* executable programs, a brief VENDINFO record. This record */
/* will contain minimal product/version/author information and */
/* either an abbreviated or a comprehensive distribution policy */
/* section, all highly compressed for efficiency. This would */
/* allow, for example, automated detection of retail software, */
/* registered versions, etc., if they showed up in BBS uploads, */
/* CD-ROMs, and so on. */
/* */
/* The VendPrcs processor will automatically check the */
/* executables in a package for appropriate distribution */
/* policies, if desired. */
/*-----------------------------------------------------------------*/
/* VENDINFO Record and File Types (cont.) */
/*--------------------------------------- intermediate record -----*/
/* The VendEdit editor, and any similar program for creating */
/* VENDINFO records, will maintain information about the product */
/* in the form of an "intermediate" record, rather than in the */
/* form of an actual VENDINFO.DIZ record. This is necessary */
/* for several reasons: */
/* 1. The editor needs more information than is actually in */
/* the VENDINFO.DIZ record itself. */
/* 2, Multiple VENDINFO files may be produced from a single */
/* intermediate record. */
/* 3. Portions of the VENDINFO.DIZ record are produced */
/* automatically from other portions of the record. */
/* 4. It helps discourage hacking of VENDINFO.DIZ records if */
/* the (readily available) editor that produces them cannot */
/* be used to modify them. */
/* The exact content of an intermediate record would vary from */
/* editor to editor, and is beyond the scope of this standard. */
/* As an aid to developers, however, provision has been made in */
/* the file-format standard for marking a particular VENDINFO */
/* record as of "intermediate" type. This would allow an editor */
/* to utilize the standard uncompressed form of the VENDINFO */
/* record as the first section of its intermediate record. */
/*-----------------------------------------------------------------*/
/******************************************/
/* Structure of the VENDINFO.DIZ Record */
/******************************************/
/*----------------------- overall VENDINFO.DIZ file structure -----*/
/* The VENDINFO.DIZ file has the following components: */
/* */
/* 1. A readable text portion of indeterminate length, */
/* terminated by a 0x1A (^Z) character. This portion is */
/* intended primarily for human consumption, but some */
/* automated uses can be made of it. For that reason, and */
/* because of its legal significance in conveying trial-use */
/* and distribution rights, some properties of its internal */
/* structure are covered by this standard. */
/* */
/* 2. A compressed data record, whose structure and content */
/* are defined in this standard. The compressed form of */
/* this record is exactly that which would be produced if */
/* it were a standalone ZIP compressed file containing one */
/* single file ("VENDDATA.") compressed using PKZIP 1.10 */
/* algorithms as implemented in TurboPower's Asynch for C++ */
/* library. */
/*-----------------------------------------------------------------*/
/*---------- internal structure of the compressed data record -----*/
/* When uncompressed, the VENDINFO data record consists of two */
/* parts: */
/* */
/* 1. A fixed length record of type viVendinfoRecord, defined */
/* below. */
/* */
/* 2. Zero or more "record extensions", which are optional */
/* additional records within the compression envelope, also */
/* defined below. */
/*-----------------------------------------------------------------*/
/*---------------------------- a comment on space utilization -----*/
/* The VENDINFO record contains many optional fields for which */
/* fixed-length portions of the record have been allocated. A */
/* common initial reaction is that this is wasteful of space. */
/* Please note, however, that fixed-length fields are easier to */
/* use, and that any wasted space is actually reclaimed by the */
/* compression algorithm. Tools that create VENDINFO records are */
/* required to place zero (null) characters in all unused bytes. */
/* As a result, the compression algorithm will be MORE effective */
/* at avoiding waste than a variable-length record could be. */
/*-----------------------------------------------------------------*/
/*************************************************************/
/* Human-Readable Text Portion of the VENDINFO.DIZ Record */
/*************************************************************/
/*------------------------- overall structure of text portion -----*/
/* The text portion of the VENDINFO.DIZ record is intended to be */
/* read by humans, though it also contains structure and format */
/* constraints that allow limited use of its content by automated */
/* tools, which operate by searching for, and perhaps parsing, */
/* specified text. The text portion contains a VENDINFO */
/* information header, which has an exact specified text, with */
/* minor possible variations, followed by a generation line */
/* indicating how and when this particular VENDINFO record was */
/* created. Then a series of sections appear, some created */
/* automatically and some by user input, some mandatory and some */
/* optional. Each is preceded by a section label. The details */
/* of all these sections are presented below. Text lines in the */
/* readable front sections may not exceed 73 characters in width, */
/* and may not contain tabs. */
/*-----------------------------------------------------------------*/
/*------------------------------- VENDINFO information header -----*/
/* It will frequently happen that a user or distributor will */
/* encounter the VENDINFO system for the first time by actually */
/* receiving a package with a VENDINFO.DIZ record in it. It is */
/* important that the human-readable portion of the record begin */
/* with sufficient information about VENDINFO, and about */
/* obtaining the VENDINFO toolset, that the recipient is able to */
/* make full, effective use of the system. Accordingly, each */
/* VENDINFO record will begin with the exact text shown below, */
/* except that a developer of an alternative VENDINFO record */
/* creation tool may add an additional paragraph at the end, */
/* without removing any of the indicated text, and consistent in */
/* style, format, and layout with the information already there. */
/* This paragraph will allow the developer to advertise the */
/* availability of his own tools. */
/* */
/* If, and only if, the developer offers a complete set of */
/* VENDINFO tools, compliant with the standard and comparable in */
/* features and quality to VendEdit, VendPrcs, and VendView, then */
/* the reference to Rams' Island Software can be removed. */
/* Otherwise, the reference must remain in order to allow users */
/* to find the necessary tools. */
/*-----------------------------------------------------------------**
┌────────────────────────────────────────────────────────────────────┐
│ VENDINFO Product Distribution Information Record │
│ │
│ This record is a means of conveying information about a software │
│ product from the author to distributors and users. It contains a │
│ normal, "human-readable" section (you're reading it now), followed │
│ by a compressed data record. The data record contains a great │
│ deal of information in a form useable by automated tools. This │
│ allows BBSes, disk vendors, etc. to automatically test for │
│ permission to distribute, and to automatically extract product │
│ information for use in BBS files databases, vendor catalogs, etc. │
│ │
│ The VENDINFO file standard is published and freely useable. │
│ │
│ The VENDINFO toolset includes a free end-user viewer, processing │
│ tools for use by distributors (BBSes, shareware disk vendors, │
│ etc.), and the editor used by author/publishers to produce these │
│ records. These tools are either free or low cost shareware. │
│ The toolset can be obtained from many sources, including the │
│ originators of VENDINFO: │
│ │
│ Rams' Island Software Voice: 303-841-2848 CompuServe: 76244,324 │
│ 7644 E. Lakecliff Way BBS: 303-841-6269 FidoNet: 1:104/333 │
│ Parker, CO 80134-5904 USA RIME: RAMSISLE │
└────────────────────────────────────────────────────────────────────┘
** Human-Readable Text Portion (cont.) **
**---------------------------------- VENDINFO generation line -----*/
/* The next line following the header box, just above, will */
/* indicate the version number of the VENDINFO standard used to */
/* construct the record, the tool used to create it (and its */
/* version number), and the date of creation. The format must be */
/* exactly as shown, except for substitution of version numbers, */
/* tool name (one word), and creation date. */
/*-----------------------------------------------------------------**
VENDINFO standard v1.00, produced by VendEdit v1.10, 12-Jun-93
**--------------------------- secondary record identification -----*/
/* In "secondary" VENDINFO files (in multipart products, the */
/* VENDINFO.DIZ files in packages after the first, are secondary */
/* files), some portions of the human-readable section are */
/* omitted. To warn the reader when this occurs, the following */
/* text is added. */
/*-----------------------------------------------------------------**
┌────────────────────────────────────────────────────────────────────┐
│ Because this is not the primary package of this multi-package │
│ product, the readable-text portion of this VENDINFO record is │
│ somewhat abbreviated. For complete information, see the VENDINFO │
│ file in the first package listed below under "Required Packages". │
└────────────────────────────────────────────────────────────────────┘
**------------------------------ standards for section labels -----*/
/* Section labels must be displayed exactly as shown in the */
/* respective sections below, including the five equal-sign ('=') */
/* characters and a space before the label, and a space and at */
/* least five equal-sign characters after the label. The */
/* spelling and capitalization of the labels must be exactly as */
/* shown. This will allow various automated tools to find the */
/* relevant sections. If additional sections are desired using */
/* labels other than those shown here, those sections should */
/* appear in the location indicated for "other information", and */
/* their labels should be in the same format, but using the */
/* minus ('-') character in place of the equal-sign character. */
/* Each section label is preceded by two blank lines. No lines */
/* of text, other than section headings, should begin with */
/* "===== " or "----- ". */
/*-----------------------------------------------------------------*/
/* Human-Readable Text Portion (cont.) */
/*------------------------------- product information section -----*/
/* The "Product Information" section should contain enough basic */
/* information about the product to allow the end-user or */
/* distributor to determine the program's relevance, and to allow */
/* the end-user to order the product or obtain technical support */
/* for it. The information content of this section is not rigid. */
/* An example is shown below. In a "secondary" VENDINFO.DIZ */
/* file, this section might be somewhat briefer. */
/*-----------------------------------------------------------------**
===== Product Information ============================================
Product: InContext Work Environment Manager
Version: 1.10
Version Date: 31-Jan-1993
Product Type: Software
Basic Distribution Policy (see License, below, for details):
Product Description: InContext(TM) Work Environment Manager V1.10
(1 of 2) <ASP>. Complete Work Environment
Manager for expert PC users. Automates more
Aspects of the PC user's work than any other
product. Designed by a PhD ergonomist, it is
based on fundamental principles of how people
actually work. Much more than a DOS shell.
NEW VERSION 1.10 has Gantt charts, multi-file
tagging, 4DOS long descriptions, PKZIP 2.04
support, *many* new features.
Category: Work environment managers
Keywords: Work Environment Manager Object Oriented DOS
Shell Calendar Project
Required Packages: INCXT11A INCXT11B
This Package: INCXT11A
Required Configuration
Processor Family: Intel 80x86 (minimum 8086/8088)
Minimum OS: MS-DOS 3.0
Standard RAM: 512K
Hard Drive Space: 1000K
Required: Hard drive
Keyboard
Won't Work With:
Floppy only
Orders: Rams' Island Software
7644 E. Lakecliff Way
Parker, CO 80134-5904
USA
Phone: 303-841-2848
BBS Name: Rams' Island BBS
BBS Phone: 303-841-2848
CompuServe: 76244,324
FidoNet: 1:104/333
Internet: 76244.324@compuserve.com
RIME: RAMSISLE
Support: Rams' Island Software
7644 E. Lakecliff Way
Parker, CO 80134-5904
USA
Phone: 303-841-2848
BBS Name: Rams' Island BBS
BBS Phone: 303-841-2848
CompuServe: 76244,324
FidoNet: 1:104/333
Internet: 76244.324@compuserve.com
RIME: RAMSISLE
** Human-Readable Text Portion (cont.) **
**------------------------- information for users ("read-me") -----*/
/* This is an optional section which can be provided by the */
/* author. This allows the author to fully replace the "READ-ME" */
/* file with VENDINFO (though a single-line READ-ME.DOC file */
/* pointing to VENDINFO.DIZ would probably be wise until folks */
/* become accustomed to VENDINFO). The content of this section */
/* is entirely up to the author, except that it should not */
/* contain information already covered in the required sections */
/* of VENDINFO. This section begins with the standard label */
/* 'Information for Users ("READ-ME")'. This section is omitted */
/* from secondary VENDINFO files. */
/*-----------------------------------------------------------------*/
/*-------------------------------------- packing list section -----*/
/* This section ("Packing List") must be automatically generated */
/* by any VENDINFO-record creation tool. It lists the files in */
/* the original package as created by the author, including file */
/* names, date/time stamps, and CRCs. This section must conform */
/* EXACTLY to the format shown by example below, in order to */
/* allow automatic detection of changes to the package. */
/*-----------------------------------------------------------------**
===== Packing List ===================================================
As released by the author or publisher, this package contained the
following files in addition to this VENDINFO.DIZ:
Filename Size Date Time CRC32
FILE_ID.DIZ 448 31-Jan-1993 01:10a 417A9DED
REGISTER.DOC 16396 31-Jan-1993 01:10a 481DB182
WHATSNEW.DOC 7509 31-Jan-1993 01:10a 4A1DD6BC
INSTALL.EXE 68291 31-Jan-1993 01:10a 9DD141C9
LHA.EXE 34283 20-Jul-1991 02:13a 2C68A172
INC-DOCS.LZH 130623 31-Jan-1993 01:10a 7138B4FC
**---------------------------------------------- installation -----*/
/* This optional section ("Installation") allows the author to */
/* include installation instructions for the product. This */
/* section is omitted from secondary VENDINFO files. */
/*-----------------------------------------------------------------*/
/*----------------------------------------- other information -----*/
/* This optional section ("Other Information", or other sections */
/* named by the author using "-" section labels) allows the */
/* author to include any other desired information, such as */
/* advertisements for other products. These sections are omitted */
/* from secondary VENDINFO files. */
/*-----------------------------------------------------------------*/
/*-------------------------------------------------- warranty -----*/
/* The "Warranty" section is optional, but should appear in all */
/* VENDINFO files describing software products. (Such a section */
/* MIGHT be omitted for, say, clip art.) The warranty should be */
/* prepared by the author with appropriate legal study or advice. */
/* The warranty indicates -- and in many cases limits -- the */
/* liability accepted by the author or publisher regarding the */
/* product. This section is omitted from secondary VENDINFO */
/* files. */
/*-----------------------------------------------------------------*/
/* Human-Readable Text Portion (cont.) */
/*-------------------------- license for use and distribution -----*/
/* The "License for Use and Distribution" section is optional, */
/* but should appear in virtually all uses of VENDINFO. The */
/* license grants limited (or unlimited, for public-domain */
/* products) rights to use and distribute the product, under */
/* conditions specified by the author. In the case of shareware */
/* with distribution restrictions, this section should */
/* "incorporate by reference" the distribution restrictions */
/* described in the attached compressed data record. It is */
/* undesirable to also list the distribution rights and */
/* restrictions in text form here, since that raises the issue of */
/* possible inconsistencies and weakens the ability of the */
/* distributor to rely upon automated processing of the data */
/* record for the conveyance of these distribution rights. */
/*-----------------------------------------------------------------*/
/************************************/
/* Legal and License Requirements */
/************************************/
/*--------------------------------------------- legal matters -----*/
/* Part of the design of the VENDINFO system involves establishing */
/* the necessary legal and licensing conditions so that authors */
/* and distributors will have common understandings on which they */
/* may rely. For example, it is necessary that the author's */
/* distribution license allow the distributor to use automated */
/* tools to determine distribution permissions, without reading */
/* text of the distribution license (unless the automated tool */
/* detects that such reading has been required by the author). */
/* If this requirement is not forced on the author, then */
/* distributors everywhere will still be reading text licenses, */
/* defeating one of the important goals of the VENDINFO system. */
/* */
/* To provide for this and other similar common understandings, */
/* it is necessary that certain VENDINFO-related tools carry */
/* specified provisions in their own license agreements. Thus, we */
/* have the following unusual situation: This standard requires, */
/* as a condition of tools compliance, that certain VENDINFO- */
/* related tools carry, in their usage licenses, specific */
/* provisions. Those provisions will, in general, have the effect */
/* of forcing the users of the tools to agree to the legal */
/* conditions underlying the VENDINFO system. One of those */
/* conditions will be that products distributed with VENDINFO.DIZ */
/* files will carry, in THEIR distribution licenses, specified */
/* provisions. Legally, all this is a bit unusual, but it is not */
/* really complicated. There are simply several levels involved. */
/* Listed below are the conditions that specific types of VENDINFO */
/* tools must satisfy. */
/* */
/* Any VENDINFO editor, which produces VENDINFO.DIZ files for */
/* distribution with products, must contain the following text in */
/* its License for Use: */
/* */
/* 'A fundamental goal of the VENDINFO system is that */
/* distributors must be able to rely upon automated testing to */
/* determine whether or not they may distribute your products. */
/* Therefore, any VENDINFO file which is distributed with your */
/* products must satisfy these conditions: */
/* */
/* It must be an "authenticated" file, containing valid */
/* authentication codes issued to you under your company name, */
/* or a company name you are authorized to use for this */
/* purpose. */
/* */
/* The "License for Use and Distribution" section must contain */
/* the actual text of your license agreement, rather than a */
/* pointer to some other document, and must include the */
/* following statements or their equivalent: "The attached */
/* VENDINFO data record is hereby incorporated by reference. */
/* Any distribution satisfying all the distribution */
/* requirements expressed in that data record is hereby */
/* authorized." (This means that distributors will NOT have to */
/* consult the "License for Use and Distribution" text itself, */
/* UNLESS you select "See Attached Text for Additional */
/* Requirements" in the data record.) */
/* Legal and License Requirements (cont.) */
/* The distributor also needs to be able to use the information */
/* you provide in the VENDINFO record without worrying about */
/* violating your copyright on the descriptions therein. As a */
/* condition of use of <editor name>, you also agree that every */
/* distributor shall have the benefit of this understanding: */
/* */
/* If the distributor satisfies your conditions for */
/* distributing the product, you authorize the distributor's */
/* use of your unaltered product descriptive texts without */
/* further permission. */
/* */
/* Finally, to keep any license disputes strictly between you */
/* and the distributor, you agree to this understanding: */
/* */
/* All licenses to distribute package are solely between the */
/* producer and distributor, and do not involve VENDINFO, */
/* Rams' Island Software (originator of VENDINFO) or */
/* <name of publisher of editor>.' */
/* */
/* Any VENDINFO processor, which purports to test VENDINFO.DIZ */
/* files or related artifacts for the purpose of determining */
/* permission to distribute products, must contain the following */
/* text in its License for Use: */
/* */
/* 'It is important that producers not forfeit any legal or */
/* copyright protections by making their distribution policy */
/* available to you in VENDINFO form. As a condition of use of */
/* VendPrcs, you agree that every such producer shall have the */
/* benefit of these understandings: */
/* */
/* All rights not expressly granted are reserved to the */
/* producer. Distribution of the product is expressly */
/* prohibited, except as specifically authorized by the */
/* producer. */
/* */
/* The producer may revoke any permissions granted you, by */
/* notifying you in writing. */
/* */
/* Finally, to keep any license disputes strictly between you */
/* and the author, you agree to this understanding: */
/* */
/* All licenses to distribute package are solely between the */
/* producer and distributor, and do not involve VENDINFO, */
/* Rams' Island Software (originator of VENDINFO) or */
/* <name of publisher of <processor>.' */
/* */
/* Note that no license requirements are levied on VENDINFO file */
/* processors that only extract information from VENDINFO files, */
/* but that do not perform distribution-permission tests. */
/*-----------------------------------------------------------------*/
/********************************/
/* Data Types and Structures */
/* Used as Building Blocks in */
/* Later Record Definitions */
/********************************/
/*--------------------------------------------------- comment -----*/
/* Because some C compilers can't handle forward references, it */
/* is necessary to define all special data structures here, ahead */
/* of the place in the main record structure at which they're */
/* used. The human reader of this file-format description may */
/* wish to skip past this "Data Types and Structures" section on */
/* first reading, returning to it only as the special structures */
/* are encountered in the description of the main record. */
/*-----------------------------------------------------------------*/
/*------------------------------------------ byte, word, long -----*/
/* A byte is an (eight-bit) data unit such as is ordinarily used */
/* to store an ASCII character or similar unsigned information. */
/* */
/* A word consists of two adjacent bytes, stored low-byte-first, */
/* as is normal on an Intel 80x86 processor. */
/* */
/* A long consists of two adjacent words, stored low-word-first, */
/* as is normal on an Intel 80x86 processor. */
/* */
/* A character string consists of a specified number of adjacent */
/* characters, terminated by a null (0x00). For example the */
/* specification: */
/* char vidProdName[16]; */
/* indicates that vidProdName is a 16-character text string, in */
/* which one character position will contain a null termination */
/* character. Whenever a character string is used to hold a list */
/* of items, the list is blank-delimited (e.g., "PCX CGM FLM"). */
/* */
/* For some fields, an array of strings is used. For example, */
/* char vidCompanyAddress[5][31]; */
/* defines vidCompanyAddress as an array consisting of five */
/* strings (i.e., five lines of text). Each string is 31 */
/* characters long, including the terminating null. */
/* */
/* The "typedef" statements below are defined as appropriate for */
/* a standard C compiler used in an IBM PC (Intel 80x86) */
/* environment. */
/*-----------------------------------------------------------------*/
typedef unsigned char byte;
typedef unsigned int word;
/* Data Types and Structures (cont.) */
/*------------------------------------------------ date, time -----*/
/* Dates are stored in the form in which file dates are stored by */
/* MS-DOS. That is, dates are words with the following layout: */
/* FEDCBA98 76543210 */
/* xxxxxxx. ........ year - 1980 */
/* .......x xxx..... month (Jan = 1) */
/* ........ ...xxxxx day of month (1st = 1) */
/* */
/* To minimize confusion among various human-readable date */
/* formats, dates which are displayed in the human-readable text */
/* section of the VENDINFO record will be shown in the format: */
/* 28-Jun-1993 */
/* where the months of the year are: */
/* Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec */
/* */
/* At present, no times are stored in the compressed data record. */
/* Times shown in the human-readable text section will be */
/* displayed using leading zeroes and AM or PM indicators, to */
/* eliminate ambiguity: */
/* 01:10a */
/*-----------------------------------------------------------------*/
typedef word Date;
/*---------------------------------------------------- prices -----*/
/* Prices (registration, shipping and handling, etc.) are all */
/* specified in a currency identified in the vidPriceWhatCurrency */
/* field. The prices themselves are stored as longs, but are */
/* interpreted as hundredths of a currency unit. For example, */
/* if the currency is US dollars, the price field would actually */
/* contain the price in US cents. Tools are expected to perform */
/* the appropriate division, or provide an appropriately placed */
/* decimal point. Doing it this way eliminates all need for */
/* floating point arithmetic in VENDINFO tools. */
/*-----------------------------------------------------------------*/
typedef long Price;
/* Data Types and Structures (cont.) */
/*=================================================================*/
/* TextBlock used to store paragraph-type text */
/*=================================================================*/
/*----------------------------------------- typedef TextBlock -----*/
/* The TextBlock is used to store blocks of text. From the point */
/* of view of the record structure, a TextBlock[81] is simply an */
/* 81-byte character string, just like char[81]. However, the */
/* TextBlock is subject to some rules that make its use by both */
/* record-creating and record-using software slightly special. */
/* */
/* The product descriptions and other TextBlocks in the VENDINFO */
/* record are intended to be used by software which will, in */
/* general, provide its own formatting, and may rearrange the */
/* text, breaking lines at different places, etc. The resulting */
/* reformatted text may be printed in catalogs, used in BBS file */
/* descriptions, etc. Accordingly, the text may contain no other */
/* characters outside the normal ASCII printable set. Thus, the */
/* user will be prevented from entering text here that is in the */
/* high-ASCII character set (above 0xFF) or below the normal */
/* printable set (0x30). */
/* */
/* Please notice in particular that a TextBlock might or might */
/* not contain carriage return/line feed sequences (word wrapping */
/* is done at the time of extraction from the record), and that */
/* it is normally terminated by a 0x1A (^Z) character. When */
/* empty, it might be terminated by either 0x1A or by a 0x00 */
/* byte. */
/*-----------------------------------------------------------------*/
typedef char TextBlock;
/* Data Types and Structures (cont.) */
/*=================================================================*/
/* Field lengths for string and TextBlock fields */
/*=================================================================*/
/*----- common string lengths -----------------*/
#define vivLenAddress 31
#define vivLenPhone 20
#define vivLenPrefix 9
#define vivLenMisc1 81
#define vivLenMisc2 161
#define vivLenMisc3 241
#define vivLenName 41
/*----- product information -------------------*/
#define vivLenProdVers 5
#define vivLenCisList 63
#define vivLenShotTypes 24
#define vivLenDesc1 61
#define vivLenDesc2 121
#define vivLenDesc3 251
#define vivLenDesc4 451
#define vivLenDesc5 751
#define vivLenDesc6 1501
/*----- prices information --------------------*/
#define vivLenCurrency 21
/*----- electronic addresses ------------------*/
#define vivLenBbsName 31
#define vivLenBbsUserName 31
#define vivLenAmericaOnLine 11
#define vivLenCompuserve 13
#define vivLenDelphi 15
#define vivLenGenie 13
#define vivLenProdigy 8
#define vivLenFidonet 20
#define vivLenInternet 81
#define vivLenRime 13
/* Data Types and Structures (cont.) */
/*=================================================================*/
/* Platform definitions (hardware/software) */
/*=================================================================*/
/*---------------------------------------- typedef viPlatform -----*/
/* This structure holds information about a particular */
/* hardware/software platform. The VENDINFO record contains two */
/* of these structures, representing the minimal requirements of */
/* the product, and the recommended configuration. */
/* */
/* Notice that the vidPlatRam... variables indicate QUANTITIES of */
/* memory (standard, EMS, Extended, XMS). In addition, there are */
/* several "Features" below (vidPlatFeatRam...) that affect the */
/* interpretation of these quantities. */
/* */
/* The vidPlatDisk... variables indicate the amount of disk space */
/* required/recommended for a minimal installation and for a full */
/* installation of the product. For most products, these values */
/* will be identical. */
/*-----------------------------------------------------------------*/
#define vivPlatCpuCount 8
#define vivPlatOsCount 10
typedef struct {
long vidPlatCpu [ vivPlatCpuCount ]; /* p?c s */
word vidPlatClockSpeedMhz; /* p?s n */
long vidPlatOpSys [ vivPlatOsCount ]; /* p?o s */
word vidPlatRamStdKb; /* p?rs n */
word vidPlatRamEmsKb; /* p?rm n */
word vidPlatRamExtKb; /* p?re n */
word vidPlatRamXmsKb; /* p?rx n */
word vidPlatDiskMinKb; /* p?dm n */
word vidPlatDiskFullKb; /* p?df n */
} viPlatform; /* 9 fields, 86 bytes */
/*--------------------------------------------- platform: CPU -----*/
/* The platform structure contains 8 words of storage dedicated */
/* to specification of a single CPU. Most of this storage is */
/* presently unallocated, in order to allow handling of new */
/* machines prior to publication of the next version of this */
/* standard. In general, exactly one bit of this 8-word area */
/* will be set to 1. If the required/recommended platform */
/* involves a CPU not on (even the extended) list, zero bits will */
/* be set, and the required CPU should be indicated in the */
/* "catch-all" text field, vidProdOtherRequirements. If no CPU */
/* is relevant (e.g., the product is a book), zero bits will be */
/* be set, as well. */
/*-----------------------------------------------------------------*/
#define vivPlatCpuIntelPC 0
#define vivPlatCpuMacintosh 1
#define vivPlatCpuAppleII 2
#define vivPlatCpuUnalloc3 3
#define vivPlatCpuUnalloc4 4
#define vivPlatCpuUnalloc5 5
#define vivPlatCpuUnalloc6 6
#define vivPlatCpuUnalloc7 7
/* Data Types and Structures (Platforms, cont.) */
/*--------------------------- Intel 80x86 -----*/
#define vibPlatCpu808x 0x0001
#define vibPlatCpu80286 0x0002
#define vibPlatCpu80386 0x0004
#define vibPlatCpu80486 0x0008
#define vibPlatCpuPentium 0x0010
/*--------------------------- Macintosh -------*/
#define vibPlatCpuMac68000 0x0001
#define vibPlatCpuMac68020 0x0002
#define vibPlatCpuMac68030 0x0004
#define vibPlatCpuMac68040 0x0008
#define vibPlatCpuMacPowerPC 0x0010
/*--------------------------- AppleII ---------*/
#define vibPlatCpuAp2 0x0001
#define vibPlatCpuAp2Plus 0x0002
#define vibPlatCpuAp2e 0x0004
#define vibPlatCpuAp2eEnhanced 0x0008
#define vibPlatCpuAp2c 0x0010
#define vibPlatCpuAp2cPlus 0x0020
#define vibPlatCpuAp2gsRom0 0x0040
#define vibPlatCpuAp2gsRom1 0x0080
#define vibPlatCpuAp2gsRom3 0x0100
/*---------------------------------------------- platform: OS -----*/
/* This section indicates the required/recommended operating */
/* system, and operates similarly to the CPU section described */
/* above. */
/*-----------------------------------------------------------------*/
#define vivPlatOsIntelMsdos 0
#define vivPlatOsIntelWindows 1
#define vivPlatOsIntelOs2 2
#define vivPlatOsMacSys 3
#define vivPlatOsMacAux 4
#define vivPlatOsApple2 5
#define vivPlatOsUnalloc6 6
#define vivPlatOsUnalloc7 7
#define vivPlatOsUnalloc8 8
#define vivPlatOsUnalloc9 9
/*--------------------------- Intel MS-DOS ----*/
#define vibPlatOsDos10 0x0001
#define vibPlatOsDos20 0x0002
#define vibPlatOsDos21 0x0004
#define vibPlatOsDos211 0x0008
#define vibPlatOsDos30 0x0010
#define vibPlatOsDos31 0x0020
#define vibPlatOsDos32 0x0040
#define vibPlatOsDos33 0x0080
#define vibPlatOsDos40 0x0100
#define vibPlatOsDos50 0x0200
#define vibPlatOsDos60 0x0400
/* Data Types and Structures (Platforms, cont.) */
/*--------------------------- Intel Windows ---*/
#define vibPlatOsWin10 0x0001
#define vibPlatOsWin20 0x0002
#define vibPlatOsWin30 0x0004
#define vibPlatOsWin31 0x0008 /* >= 286 */
#define vibPlatOsWinNT 0x0100
#define vibPlatOsWinFW 0x0800
#define vibPlatOsWinPen 0x4000
/*--------------------------- Intel OS/2 ------*/
#define vibPlatOsOS2_10 0x0001
#define vibPlatOsOS2_11 0x0002
#define vibPlatOsOS2_12 0x0004
#define vibPlatOsOS2_13 0x0008
#define vibPlatOsOS2_20 0x0010 /* >= 386 */
#define vibPlatOsOS2_21 0x0020
/*--------------------------- Mac Sys ---------*/
#define vibPlatOsMacSys6_0_5 0x0001
#define vibPlatOsMacSys6_0_7 0x0002
#define vibPlatOsMacSys6_0_8 0x0004
#define vibPlatOsMacSys7_0 0x0008
#define vibPlatOsMacSys7_0_1 0x0010
#define vibPlatOsMacSys7_1 0x0020
/*--------------------------- Mac A/UX --------*/
#define vibPlatOsMacAux2_0_1 0x0001
#define vibPlatOsMacAux3_0 0x0002
/*--------------------------- AppleII ---------*/
#define vibPlatOsAp2Dos33 0x0001
#define vibPlatOsAp2Prodos81x 0x0002
#define vibPlatOsAp2Prodos82x 0x0004
#define vibPlatOsAp2Gsos4x 0x0100
#define vibPlatOsAp2Gsos5x 0x0200
#define vibPlatOsAp2Gsos60 0x0400
#define vibPlatOsAp2Gsos601 0x0800
/*--------------------------- Unix ------------*/
/* Data Types and Structures (Platforms, cont.) */
/*---------------------------------------- typedef viPlatFeat -----*/
/* The VENDINFO record also contains ONE list of platform */
/* features which may be associated with the product. Each of */
/* these is represented by one byte in the vidPlatFeatures array. */
/* Each such byte can have one of the following four values. */
/* These values are defined this way: */
/* Irrelevant -- Presence or absence of this feature will */
/* have no effect on whether or not this */
/* product works. */
/* Supported -- This particular feature is specifically */
/* supported by the product. */
/* Recommended -- It is recommended that this feature be */
/* present if the product is used. */
/* Required -- This feature must be present, or the */
/* product won't work. */
/* WontWork -- If this feature is present, the product */
/* won't work. */
/* Unknown -- Self-explanatory. */
/*-----------------------------------------------------------------*/
#define vivPlatFeatCount 55
typedef struct {
byte vidPlatFeatures [ vivPlatFeatCount + 10 ];/* pf? */
/* see vidPlatFeat... */
} viPlatFeat; /* 55 fields, 65 bytes */
/*--------------------------- field values ----*/
#define vibPlatFeatIrrelevant 0x0
#define vibPlatFeatSupported 0x1
#define vibPlatFeatRecommended 0x2
#define vibPlatFeatRequired 0x3
#define vibPlatFeatWontWork 0x4
#define vibPlatFeatUnknown 0x5
/*--------------------------- configuration ---*/
#define vivPlatFeatConfFpu 0 /* pfcf n */
#define vivPlatFeatConfLaptop 1 /* pfcl n */
#define vivPlatFeatConfMca 2 /* pfcm n */
/*--------------------------- RAM -------------*/
#define vivPlatFeatRamExpandOrExtend 3 /* pfro n */
#define vivPlatFeatRamEms 4 /* pfrm n */
#define vivPlatFeatRamExtended 5 /* pfre n */
#define vivPlatFeatRamXms 6 /* pfrx n */
#define vivPlatFeatRamHimem 7 /* pfrh n */
/*--------------------------- disk drives------*/
#define vivPlatFeatDiskHard 8 /* pfdh n */
#define vivPlatFeatDiskFloppyOnly 9 /* pfdf n */
#define vivPlatFeatDiskCdrom 10 /* pfdc n */
/*--------------------------- ports -----------*/
#define vivPlatFeatPortPar 11 /* pfop n */
#define vivPlatFeatPortSer 12 /* pfos n */
#define vivPlatFeatPortPcmcia 13 /* pfoc n */
#define vivPlatFeatPortGame 14 /* pfog n */
/* Data Types and Structures (Platforms, cont.) */
/*--------------------------- video -----------*/
#define vivPlatFeatVidMonoText 15 /* pfvm n */
#define vivPlatFeatVidHerc 16 /* pfvh n */
#define vivPlatFeatVidTandy 17 /* pfvt n */
#define vivPlatFeatVidCga 18 /* pfvc n */
#define vivPlatFeatVidEga 19 /* pfve n */
#define vivPlatFeatVidMcga 20 /* pfvn n */
#define vivPlatFeatVidMcga256 21 /* pfvo n */
#define vivPlatFeatVidVga 22 /* pfvv n */
#define vivPlatFeatVidSvgaVesa 23 /* pfvw n */
#define vivPlatFeatVidSvgaOther 24 /* pfvs n */
#define vivPlatFeatVid8514 25 /* pfv8 n */
#define vivPlatFeatVidXga 26 /* pfvx n */
#define vivPlatFeatVidMonoMonitor 27 /* pfva n */
#define vivPlatFeatVidColorMonitor 28 /* pfvb n */
/*--------------------------- input -----------*/
#define vivPlatFeatInpKeyboard 29 /* pfik n */
#define vivPlatFeatInpMouse 30 /* pfim n */
#define vivPlatFeatInpDigitizer 31 /* pfid n */
#define vivPlatFeatInpJoystick 32 /* pfij n */
/*--------------------------- scanner ---------*/
#define vivPlatFeatScanHandLogitech 33 /* pfal n */
#define vivPlatFeatScanHandGenius 34 /* pfag n */
#define vivPlatFeatScanFlatbedHP 35 /* pfaf n */
/*--------------------------- printer ---------*/
#define vivPlatFeatPrinterYes 36 /* pfpy n */
#define vivPlatFeatPrintText 37 /* pfpt n */
#define vivPlatFeatPrintGraphIbm 38 /* pfpi n */
#define vivPlatFeatPrintGraphEpson9 39 /* pfpe n */
#define vivPlatFeatPrintGraphEpson24 40 /* pfpf n */
#define vivPlatFeatPrintHpDeskjet 41 /* pfpd n */
#define vivPlatFeatPrintHpPaintjet 42 /* pfpp n */
#define vivPlatFeatPrintHpLaserjet 43 /* pfpl n */
#define vivPlatFeatPrintPostscript 44 /* pfps n */
#define vivPlatFeatPrintPlotter 45 /* pfpo n */
/*--------------------------- modem -----------*/
#define vivPlatFeatModemAnySerial 46 /* pfma n */
#define vivPlatFeatModemHayesCompat 47 /* pfmh n */
#define vivPlatFeatModemFax 48 /* pfmf n */
/*--------------------------- sound card ------*/
#define vivPlatFeatSoundCardYes 49 /* pfsy n */
#define vivPlatFeatSoundAdlib 50 /* pfsa n */
#define vivPlatFeatSoundCovox 51 /* pfsc n */
#define vivPlatFeatSoundBlast 52 /* pfsb n */
#define vivPlatFeatSoundMidi 53 /* pfsm n */
/*--------------------------- network ---------*/
#define vivPlatFeatNetwork 54 /* pfne n */
/* Data Types and Structures (cont.) */
/*--------------------------------------- typedef viElectAddr -----*/
/* Electronic Addresses for Author/Support/Ordering */
/*-----------------------------------------------------------------*/
typedef struct {
char vidBbsName [ vivLenBbsName ]; /* ?en s */
char vidBbsPhone [ vivLenPhone ]; /* ?eb s */
char vidBbsUserName [ vivLenBbsUserName]; /* ?eu s */
char vidAmericaOnLine [vivLenAmericaOnLine];/* ?ea s */
char vidCompuserve [ vivLenCompuserve ]; /* ?ec s */
char vidDelphi [ vivLenDelphi ]; /* ?ed s */
char vidGenie [ vivLenGenie ]; /* ?eg s */
char vidProdigy [ vivLenProdigy ]; /* ?ep s */
char vidFidonet [ vivLenFidonet ]; /* ?ef s */
char vidInternet [ vivLenInternet ]; /* ?ei s */
char vidRime [ vivLenRime ]; /* ?er s */
TextBlock vidOtherElect [ vivLenMisc2 ]; /* ?eo s */
} viElectAddr; /* 12 fields, 417 bytes */
/* Data Types and Structures (cont.) */
/*------------------------------------------ typedef viRegPkg -----*/
/* This structure contains information about the price and */
/* registration benefits associated with a shareware product. */
/* Two of these structures are in the VENDINFO record: one */
/* represents the minimum registration package, and one the */
/* maximum. If there is only one registration price for a */
/* shareware product, the two structurea should be identical. */
/* If there's any price or benefits information not covered by */
/* the available fields, the "catch-all" vidRegPriceBenefitsOther */
/* field can be used. */
/*-----------------------------------------------------------------*/
typedef struct {
Price vidRegPrice; /* i?p p */
long vidRegBenefits[2]; /* see vibBene... */ /* i?b? */
char vidRegPriceBenefitsOther [ vivLenMisc1 ];/* i?v s */
} viRegPkg; /* 37 fields, 93 bytes */
/*------------------------------------- registration benefits -----*/
/* These boolean fields contain a list of possible registration */
/* benefits. */
/*-----------------------------------------------------------------*/
#define vibBeneAddlData 0x00000001L /* i?bad b */
#define vibBeneAddlProg 0x00000002L /* i?bap b */
#define vibBeneBbsSupp 0x00000004L /* i?bbs b */
#define vibBeneBranding 0x00000008L /* i?bbr b */
#define vibBeneBugNotice 0x00000010L /* i?bbu b */
#define vibBeneCheatCode 0x00000020L /* i?bcc b */
#define vibBeneCommission 0x00000040L /* i?bcm b */
#define vibBeneContest 0x00000080L /* i?bcn b */
#define vibBeneCustom 0x00000100L /* i?bcu b */
#define vibBeneConvertOther 0x00000200L /* i?bcr b */
#define vibBeneConvertOld 0x00000400L /* i?bcx b */
#define vibBeneDiscount 0x00000800L /* i?bdi b */
#define vibBeneEnhanced 0x00001000L /* i?ben b */
#define vibBeneFreeGoodies 0x00002000L /* i?bfg b */
#define vibBeneFuture 0x00004000L /* i?bfu b */
#define vibBeneGuarantee 0x00008000L /* i?bgu b */
#define vibBeneHints 0x00010000L /* i?bhi b */
#define vibBeneLatest 0x00020000L /* i?bla b */
#define vibBeneLifetimeSupp 0x00040000L /* i?bls b */
#define vibBeneNewsletter 0x00080000L /* i?bne b */
#define vibBenePreprint 0x00100000L /* i?bpp b */
#define vibBenePrintedManual 0x00200000L /* i?bpm b */
#define vibBeneQuickRef 0x00400000L /* i?bqr b */
#define vibBeneRecordLimit 0x00800000L /* i?brl b */
#define vibBeneRrsElim 0x01000000L /* i?bre b */
#define vibBeneRepeatDelay 0x02000000L /* i?brd b */
#define vibBeneSampleData 0x04000000L /* i?bsd b */
#define vibBeneSource 0x08000000L /* i?bso b */
#define vibBeneSubscription 0x10000000L /* i?bsu b */
#define vibBeneTimeLimit 0x20000000L /* i?btl b */
#define vibBeneTutorial 0x40000000L /* i?btu b */
#define vibBeneUpdateNotice 0x80000000L /* i?bun b */
#define vibBeneUpdateFree 0x00000001L /* i?buf b */
#define vibBeneVoiceSupp 0x00000002L /* i?bvs b */
#define vibBeneWatermark 0x00000004L /* i?bwa b */
#define vivBeneCount 35
/*****************************/
/* VENDINFO Header Section */
/*****************************/
/*--------------------------------------------------- comment -----*/
/* Because some C compilers can't handle forward references, it */
/* is necessary to define the individual sections of the fixed- */
/* length VENDINFO record before defining the record itself. The */
/* sections are: */
/* header */
/* product information */
/* author information */
/* ordering information */
/* prices and benefits information */
/* support information */
/* general (channel-independent) distribution policy */
/* channel-specific distribution policy */
/*-----------------------------------------------------------------*/
/*=================================================================*/
/* Header Section structure definition */
/*=================================================================*/
/*-------------------------------------- typedef viSectHeader -----*/
/* This section of the record is used for identification and */
/* security, and contains information about the overall record, */
/* such as the date/time of its creation. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidHeadString[12]; /* "VENDINFO" + 0x05040306 */
word vidHeadVersion; /* hv n */
byte vidHeadViType; /* see vivRecType... */ /* ht n */
Date vidHeadPrepDate; /* hd d */
long vidHeadTextRecordSize;
long vidHeadTextRecordCRC;
long vidHeadDataRecordSize; /* uncompressed */
long vidHeadDataRecordCRC; /* uncompressed */
long vidHeadUserId;
long vidHeadAuthenticityKey1;
long vidHeadAuthenticityKey2;
} viSectHeader; /* 11 fields, 45 bytes */
/*=================================================================*/
/* Constants used in VENDINFO Header Section */
/*=================================================================*/
/*----------------- VENDINFO record types (see vidHeadViType) -----*/
/* There are several entirely different types of VENDINFO record, */
/* with different structures. The record-type field allows them */
/* to be differentiated. These are the possible values. */
/*-----------------------------------------------------------------*/
#define vivRecTypePackageMain 1
#define vivRecTypePackageSecondary 2
#define vivRecTypeIntermed 99
/*****************************/
/* Product Section */
/*****************************/
/*=================================================================*/
/* Product Section structure definition */
/*=================================================================*/
/*------------------------------------- typedef viSectProduct -----*/
/* The Product Section describes the product and version, */
/* including names, descriptions, categories, keywords, and */
/* minimal and recommended platforms. */
/*-----------------------------------------------------------------*/
typedef struct {
byte vidProdType; /* see vivProdType...*/ /* py n */
char vidProdName [ vivLenName ]; /* pp s */
char vidProdNameExtension [ vivLenName ]; /* pe s */
char vidProdVersion [ vivLenProdVers ]; /* pv s */
Date vidProdVersionDate; /* pt d */
char vidProdVersionReason [ vivLenMisc2 ]; /* pr t */
char vidProdFileNamePrefix [ vivLenPrefix ]; /* pn s */
byte vidProdNumberOfParts; /* ppn n */
char vidProdThisPart [ vivLenPrefix ]; /* ppt s */
char vidProdListOfParts [ vivLenMisc1 ]; /* ppl s */
char vidProdListOfCisParts [ vivLenCisList ]; /* ppc s */
char vidProdScreenshotTypes [vivLenShotTypes]; /* ph s */
char vidProdOldPkgsReplaced [ vivLenMisc1 ]; /* px s */
TextBlock vidProdDescription1 [ vivLenDesc1 ]; /* pd1 t */
TextBlock vidProdDescription2 [ vivLenDesc2 ]; /* pd2 t */
TextBlock vidProdDescription3 [ vivLenDesc3 ]; /* pd3 t */
TextBlock vidProdDescription4 [ vivLenDesc4 ]; /* pd4 t */
TextBlock vidProdDescription5 [ vivLenDesc5 ]; /* pd5 t */
TextBlock vidProdDescription6 [ vivLenDesc6 ]; /* pd6 t */
viPlatform platMin; /* p1? */
viPlatform platRec; /* p2? */
viPlatFeat platFeat; /* pf? */
char vidProdOtherRequiredSw [ vivLenMisc1 ]; /* ps s */
TextBlock vidProdOtherRequirements [ vivLenMisc3 ]; /* po t */
long vidProdCategories[5]; /* pc? ? */
char vidProdKeywords [ vivLenMisc1 ]; /* pk s */
} viSectProduct; /* 100 fields, 4315 bytes */
/*=================================================================*/
/* Constants used in Product Section */
/*=================================================================*/
/*---------------------------- product type (see vidProdType) -----*/
/* While VENDINFO is primarily intended to describe software */
/* products, it can be used to describe various other types of */
/* computer-related products, especially those that can actually */
/* be distributed electronically. Here are possible values of */
/* the product-type field. */
/*-----------------------------------------------------------------*/
#define vivProdTypeSoftware 0
#define vivProdTypeHardware 1
#define vivProdTypeDataFile 2
#define vivProdTypeTextFile 3
#define vivProdTypeBook 4
#define vivProdTypeMagazine 5
#define vivProdTypeCatalog 6
#define vivProdTypeVideo 7
/* Product Section (cont.) */
/*=================================================================*/
/* Notes on Product Section */
/*=================================================================*/
/*-------------------------- product name, extension, version -----*/
/* In order to allow use of the information by automated tools, */
/* the product name and version are broken into components. For */
/* example, the phrase "Lotus 1-2-3 Spreadsheet Processor, V2.20" */
/* would be broken down as follows: */
/* vidProdName -- "Lotus 1-2-3" */
/* vidProdNameExtension -- "Spreadsheet Processor" */
/* vidProdVersion -- "2.20" */
/*-----------------------------------------------------------------*/
/*--------------------------- product package filenames, etc. -----*/
/* Distribution packages are typically compressed files with the */
/* filename prefix indicating the specific product package, and */
/* the filename extension indicating the compression program used */
/* to produce the package. Except where shorter names are */
/* required (e.g., on CompuServe), the filename prefix should */
/* take one of the following forms: */
/* AAAAA99P -- For multipart packages, the first five */
/* characters are alphabetic, and represent the */
/* product. The next two are numeric, and */
/* represent the version. The last is alphabetic, */
/* using the sequence { A, B, C, ... }, and */
/* indicates which part of the total product this */
/* particular package is. */
/* AAAAA99 -- For single-part packages, any of the remaining */
/* AAAAA999 three forms is allowed, where the product name */
/* AAAAAA99 portion is strictly alphabetic, and the version */
/* portion is strictly numeric. */
/* */
/* vidProdNumberOfParts contains the number of packages making up */
/* the product. */
/* */
/* vidProdListOfParts contains a blank-separated list of the */
/* filename prefixes of the packages making up the product. */
/* Similarly, vidProdListOfCisParts contains a list of the */
/* filename prefixes to be used on a system on which filename */
/* prefixes are restricted to six characters. In each case, the */
/* first part listed will contain the main VENDINFO.DIZ files, */
/* while the others, if any, will contain secondary VENDINFO.DIZ */
/* files. Finally, vidProdOldPkgsReplaced contains a list of */
/* filename prefixes of previous versions packages replaced by */
/* this version. */
/*-----------------------------------------------------------------*/
/*-------------------------------------- product screen shots -----*/
/* If the author/publisher makes available a set of screen shots */
/* of the product, on request and/or via the VENDINFO Product */
/* Registry, the filename extensions (e.g., graphical formats) of */
/* the available screen shots should be listed in */
/* vidProdScreenshotTypes. Use the artificial filename */
/* extension "FLM" to indicate hardcopy photos available only */
/* from the author. A sample value for this string is */
/* "PCX CGM FLM". */
/*-----------------------------------------------------------------*/
/* Product Section (cont.) */
/*---------------------------------------- other requirements -----*/
/* Two "catch-all" variables are provided for recording platform */
/* requirements or recommendations that aren't covered in the */
/* viPlatform structure. Wherever possible, requirements should */
/* be defined in the viPlatform structures, since that allows */
/* complete processing by automated tools. These "catch-alls" */
/* are only for cases not covered. */
/* */
/* vidProdOtherRequiredSw is a simple string which might */
/* contain one or more (blank-separated) names of other software */
/* necessary to use the product. Likely examples are run-time */
/* packages, such as VBRUN200.DLL, or main applications if the */
/* product is an add-on (e.g., "Lotus 1-2-3" for a spreadsheet */
/* macro package). */
/* */
/* vidProdOtherRequirements is a TextBlock (defined earlier) */
/* in which to list hardware, operating systems, peripherals, */
/* etc., that are not covered in viPlatform, and in which to list */
/* version numbers and other details of the requirements in */
/* viPlatform WHEN NECESSARY. For example, a laser-printer */
/* product that works on HP LaserJets, but only starting with the */
/* LaserJet II, should so indicate here (e.g., "LaserJet II and */
/* later"), but if it works with all LaserJets, no specification */
/* is necessary in this TextBlock. */
/*-----------------------------------------------------------------*/
/*--------------------------- product categories and keywords -----*/
/* vidProdCategories is an array containing one primary and four */
/* secondary category codes, using the numbering scheme developed */
/* by Rob Rosenberger for his ASP Catalog Entry Editor or a */
/* similar scheme. VENDINFO editor and processor tools will */
/* probably use an external file to map categories into category */
/* codes, and vice versa. A small example portion of such a file */
/* is: */
/* 01000000 Utilities */
/* 01010000 Disk utilities */
/* 01010100 Disk cataloging */
/* 01010200 Hard disk utilities */
/* 01010300 Floppy disk utilities */
/* 01020000 File utilities */
/* 01020100 Backup/restore */
/* 01020200 Encryption & security */
/* Shorthand codes for product categories are "pc1", "pc2", etc. */
/* */
/* vidProdKeywords is a blank-separated list of keywords */
/* describing the product. In general, keywords should be listed */
/* in order of importance, since it is possible that only a */
/* portion of the list will be used. At present, no standardized */
/* list of keywords is planned (i.e., the list is "free-form"). */
/*-----------------------------------------------------------------*/
/*****************************/
/* Author Section */
/*****************************/
/*=================================================================*/
/* Author Section structure definition */
/*=================================================================*/
/*-------------------------------------- typedef viSectAuthor -----*/
/* The Author section contains information about the product's */
/* author or publisher. This is distinct from information about */
/* how to order, or how to obtain technical support. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidAuthorName [ vivLenName ]; /* an s */
char vidAuthorCompanyName [ vivLenName ]; /* ac s */
char vidAuthorCompanyAddress[5][vivLenAddress];/* aa t */
char vidAuthorPhone [ vivLenPhone ]; /* ap s */
char vidAuthorFax [ vivLenPhone ]; /* af s */
char vidAuthorQueriesPhone [ vivLenPhone ]; /* aq s */
viElectAddr elec; /* ae? */
word vidAuthorMembership; /* vibMember... */ /* am? b */
char vidAuthorMembershipOther [ vivLenMisc1 ]; /* amx s */
} viSectAuthor; /* 25 fields, 797 bytes */
/*----------------------------------------------- memberships -----*/
/* Author membership in trade associations may be relevant to */
/* users and distributors. For example, ASP distributor members */
/* are required to mark products by ASP author/publisher members */
/* in their catalogs and files lists. Trade associations not */
/* recognized in the current version of the standard can be */
/* handled via the vidAuthorMembershipOther string. Known */
/* trade associations are: */
/* ASAD -- Association of Shareware Authors and */
/* Distributors */
/* ASP -- Association of Shareware Professionals */
/* DSAH -- Deutschsprachige Shareware Authoren und */
/* Haendlervereinigung */
/* ESC -- Educational Software CoOperative */
/* SPA -- Software Publisher's Association */
/* STAR -- Shareware Trade Association and Resources */
/*-----------------------------------------------------------------*/
#define vibMemberAsad 0x00000001 /* amb b */
#define vibMemberAsp 0x00000002 /* ama b */
#define vibMemberDsah 0x00000004 /* amd b */
#define vibMemberEsc 0x00000008 /* ame b */
#define vibMemberSpa 0x00000010 /* amp b */
#define vibMemberStar 0x00000020 /* ams b */
/*=================================================================*/
/* Notes on Author Section */
/*=================================================================*/
/*-------------------------------------- author, company name -----*/
/* The vidAuthorName field is intended for the author's personal */
/* name, if that is to be included in the record. The */
/* vidCompanyName field must not be omitted. If no separate */
/* company name is used, the author's personal name will appear */
/* here. This field is used as one of the keys in the VENDINFO */
/* security arrangements. Changing it will invalidate any */
/* security and user-registration keys based on it. */
/*-----------------------------------------------------------------*/
/*****************************/
/* Order Section */
/*****************************/
/*=================================================================*/
/* Order Section structure definition */
/*=================================================================*/
/*--------------------------------------- typedef viSectOrder -----*/
/* The Order section provides contact information for ordering */
/* the product or related products, as distinct from contact */
/* information about the author or technical support. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidOrderAddress [ 6 ] [ vivLenAddress ]; /* oa t */
char vidOrderPhoneTollFree [ vivLenPhone ]; /* ot s */
char vidOrderPhone [ vivLenPhone ]; /* op s */
char vidOrderFax [ vivLenPhone ]; /* of s */
viElectAddr elec; /* oe? */
word vidOrderCredit; /* see vibCredit... */ /* oc? b */
char vidOrderCreditOther [ vivLenMisc1 ]; /* ocx s */
long vidOrderFunds; /* see vibPay... */ /* ox? b */
char vidOrderFundsOther [ vivLenMisc1 ]; /* oxx s */
char vidOrderBankAccount [ vivLenMisc1 ]; /* ob s */
} viSectOrder; /* 45 fields, 912 bytes */
/*---------------------------------------------- credit cards -----*/
/* The vidOrderCredit field allows specification of known credit */
/* cards that are acceptable. Any additional cards and */
/* information about surcharges, etc., can be listed in the */
/* vidOrderCreditOther string. */
/*-----------------------------------------------------------------*/
#define vibCreditAccessEurocard 0x0001 /* oce b */
#define vibCreditAmexOptima 0x0002 /* oca b */
#define vibCreditDinersCard 0x0004 /* occ b */
#define vibCreditDiscover 0x0008 /* ocd b */
#define vibCreditMastercard 0x0010 /* ocm b */
#define vibCreditVisa 0x0020 /* ocv b */
/*---------------- acceptable currencies and forms of payment -----*/
/* The vidOrderFunds field allows specification of the various */
/* forms of cash, check, and money order payment that may be */
/* used. International banking practices and exchange rates make */
/* this a somewhat complicated area. Unfortunately, the fields */
/* therefore required detailed definition. */
/* PmoSameCountry -- postal money order issued in recipient's */
/* country. */
/* PmoInternational -- international postal money order */
/* CheckPersSame -- a personal check written in the currency of */
/* the recipient's country and drawn on a bank */
/* in the recipient's country. */
/* CheckPersHardSender -- a personal check written in a stable, */
/* convertible, "hard" currency other than */
/* that used in recipient's country, and drawn */
/* on a bank in the sender's, and not the */
/* recipient's, country. */
/* CheckPersHardRecip -- a personal check written in a stable, */
/* convertible, "hard" currency other than */
/* that used in recipient's country, and */
/* drawn on a bank in the recipient's country. */
/* Order Section (cont.) */
/* CheckPersOther -- a personal check other than those */
/* described above, typically in a "soft" */
/* currency. */
/* CheckBank... -- same as the four categories just listed, */
/* but the check is a bank draft or cashier's */
/* check. */
/* Cash... -- similar to check categories above, but involving */
/* actual currency sent through the mail */
/* TravCheck... -- similar to categories above, but involving */
/* traveller's checks. */
/* AmexMoneyOrder -- American Express Money Order */
/* EuroChequeSenderGuar -- EuroCheque written in the currency */
/* of the sender, with a valid cheque */
/* guarantee card number written on the back. */
/* DirectBank -- Direct bank-to-bank electronic funds transfer, */
/* paid to the bank and account number */
/* indicated in vidOrderBankAccount. */
/* PurchOrderNbrMost -- Purchase order numbers accepted in most */
/* cases from major firms. */
/* PurchOrderHardcopyMost -- Purchase orders accepted in */
/* hardcopy from most major firms. */
/*-----------------------------------------------------------------*/
#define vibPayPmoSameCountry 0x00000001 /* oxms b */
#define vibPayPmoInternational 0x00000002 /* oxmi b */
#define vibPayCheckPersSame 0x00000004 /* oxps b */
#define vibPayCheckPersHardSender 0x00000008 /* oxph b */
#define vibPayCheckPersHardRecip 0x00000010 /* oxpr b */
#define vibPayCheckPersOther 0x00000020 /* oxpo b */
#define vibPayCheckBankSame 0x00000040 /* oxbs b */
#define vibPayCheckBankHardSender 0x00000080 /* oxbh b */
#define vibPayCheckBankHardRecip 0x00000100 /* oxbr b */
#define vibPayCheckBankOther 0x00000200 /* oxbo b */
#define vibPayCashSame 0x00000400 /* oxcs b */
#define vibPayCashHard 0x00000800 /* oxch b */
#define vibPayCashOther 0x00001000 /* oxco b */
#define vibPayTravCheckSame 0x00002000 /* oxts b */
#define vibPayTravCheckOther 0x00004000 /* oxto b */
#define vibPayAmexMoneyOrder 0x00008000 /* oxa b */
#define vibPayEuroChequeOrigGuar 0x00010000 /* oxe b */
#define vibPayDirectBank 0x00020000 /* oxd b */
#define vibPayPurchOrderNbrMost 0x00040000 /* oxon b */
#define vibPayPurchOrderHardcopyMost 0x00080000 /* oxoh b */
/*****************************/
/* Prices Section */
/*****************************/
/*=================================================================*/
/* Prices Section structure definition */
/*=================================================================*/
/*-------------------------------------- typedef viSectPrices -----*/
/* The Prices structure contains information about prices and */
/* registration benefits for the product, including availability */
/* of site licenses and dealer discounts, royalty information, */
/* non-shareware versions, etc. */
/*-----------------------------------------------------------------*/
#define vivPriceShipCount 7
typedef struct {
viRegPkg mini; /* i1? */
viRegPkg maxi; /* i2? */
char vidPriceWhatCurrency [ vivLenCurrency ]; /* ic s */
Price vidPriceShip [ vivPriceShipCount]; /* is? p */
/* see vivPriceShip... */
word vidPriceMiscFlags; /* vibPriceMisc... */ /* im? */
Price vidPriceRoyaltyMin; /* irm p */
char vidPriceRoyaltyMinText [ vivLenMisc1 ]; /* irn s */
Price vidPriceRoyaltyMax; /* irx p */
char vidPriceRoyaltyMaxText [ vivLenMisc1 ]; /* iry s */
char vidPriceRoyaltyAgent [ vivLenMisc1 ]; /* ira s */
} viSectPrices; /* 96 fields, 488 bytes */
/*------------------------------------- shipping and handling -----*/
/* These fields allow separate shipping and handling charges by */
/* continent, and allow a separate rate for recipients in the */
/* same country as the order address. These amounts are to be */
/* expressed in the same currency as the registration prices. */
/*-----------------------------------------------------------------*/
#define vivPriceShipSameCountry 0 /* isc n */
#define vivPriceShipNorthAmerica 1 /* isn n */
#define vivPriceShipSouthAmerica 2 /* iss n */
#define vivPriceShipEurope 3 /* ise n */
#define vivPriceShipAsia 4 /* isa n */
#define vivPriceShipAfrica 5 /* isf n */
#define vivPriceShipPacificRim 6 /* isp n */
/*--------------------------------------------- pricing misc. -----*/
/* vidPriceMiscFlags contains these binary flags. The fields are */
/* defined as follows: */
/* Sitelice -- site licenses are available */
/* SiteliceSeeText -- actual site license rates are included */
/* in the human-readable portion of the */
/* VENDINFO record. */
/* Discount -- dealer discount prices are available */
/* DiscountSeeText -- actual dealer discount rates are */
/* included in the human-readable portion of */
/* the VENDINFO record. */
/* Royalty -- royalties are required for some forms of */
/* distribution of this product. Note that */
/* royalty rates can be specified here in the */
/* VENDINFO data record (e.g., */
/* vidPriceRoyaltyMin), in the human-readable */
/* portion of the record, or neither. */
/* RoyaltyNegot -- royalty rates are always negotiated on a */
/* case-by-case basis. */
/* Prices Section */
/* RoyaltySeeText -- royalty rates are included in the */
/* human-readable portion of the VENDINFO */
/* record. */
/* NsvAvailable -- a non-shareware (enhanced) version of this */
/* shareware product is available. */
/* LcrAvailable -- a low-cost retail version of this product */
/* is available for distribution. */
/*-----------------------------------------------------------------*/
#define vibPriceMiscSitelice 0x00000001 /* ims b */
#define vibPriceMiscSiteliceSeeText 0x00000002 /* imt b */
#define vibPriceMiscDiscount 0x00000004 /* imd b */
#define vibPriceMiscDiscountSeeText 0x00000008 /* ime b */
#define vibPriceMiscRoyalty 0x00000010 /* imr b */
#define vibPriceMiscRoyaltyNegot 0x00000020 /* imq b */
#define vibPriceMiscRoyaltySeeText 0x00000040 /* imp b */
#define vibPriceMiscNsvAvailable 0x00000080 /* imn b */
#define vibPriceMiscLcrAvailable 0x00000100 /* iml b */
#define vivPriceMiscCount 9
/*****************************/
/* Support Section */
/*****************************/
/*=================================================================*/
/* Support Section structure definition */
/*=================================================================*/
/*------------------------------------- typedef viSectSupport -----*/
/* The Support section contains contact information for technical */
/* support for the product. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidSupportAddress [6] [vivLenAddress]; /* sa t */
char vidSupportPhone [ vivLenPhone ]; /* sp s */
char vidSupportFax [ vivLenPhone ]; /* sf s */
viElectAddr elec; /* se? */
TextBlock vidSupportForums [ vivLenMisc1 ]; /* ss t */
} viSectSupport; /* 16 fields, 724 bytes */
/*****************************/
/* General Section */
/*****************************/
/*=================================================================*/
/* General (channel-independent) Distribution Section */
/*=================================================================*/
/*------------------------------------- typedef viSectGeneral -----*/
/* The General section specifies information about the product's */
/* packaging and distribution that applies across all channels of */
/* distribution. Most of the information is in the form of */
/* binary flags, defined a bit later. The various Text fields */
/* serve as additional-information "catch-all" fields for various */
/* subjects that are discussed in connection with those binary */
/* flags. */
/*-----------------------------------------------------------------*/
typedef struct {
word vidGenlDistType; /* see vivDistType... */ /* gt n */
long vidGenlMiscFlags; /* vidGenlMisc... */ /* gm? b */
char vidGenlGeogText [ vivLenMisc1 ]; /* gg s */
char vidGenlInstallText [ vivLenMisc1 ]; /* gi s */
char vidGenlCompressText [ vivLenMisc1 ]; /* gc s */
char vidGenlChangeText [ vivLenMisc1 ]; /* gh s */
char vidGenlGroupSimText [ vivLenMisc1 ]; /* gs s */
char vidGenlGroupDisText [ vivLenMisc1 ]; /* gd s */
char vidGenlVendorUpgradeText [ vivLenMisc1 ]; /* gu s */
} viSectGeneral; /* 25 fields, 573 bytes */
/* General Section (cont.) */
/*-------------------------------- product distribution types -----*/
/* The vidGenlDistType field allows the author to specify the */
/* basic distribution category into which the product falls. */
/* Definitions are: */
/* Commercial -- "commercial" product, not distributable */
/* except through written permission/contract. */
/* CommercialDist -- "commercial" product specifically */
/* intended for use in distribution packages. */
/* This code would probably appear only on an */
/* executable program, not in a VENDINFO.DIZ. */
/* ShareRegistered -- registered version of shareware */
/* program, not distributable. This code */
/* would probably appear only on an executable */
/* program, not in a VENDINFO.DIZ. */
/* ShareRegDist -- registered version of shareware program */
/* specifically intended for use in */
/* distribution packages (e.g., an install */
/* program). This code would probably appear */
/* only on an executable program, not in a */
/* VENDINFO.DIZ. */
/* ShareRestricted -- shareware product, with distribution */
/* restrictions expressed in the Distribution */
/* section of the record. */
/* ShareUnlimited -- shareware product, freely distributable */
/* by all channels without further permission. */
/* CopyrUnlimFree -- copyrighted program, but freely */
/* distributable by all channels, and freely */
/* useable without charge or registration. */
/* Sometimes called "freeware" or */
/* "bannerware". */
/* Demo -- demonstration program, not necessarily fully */
/* functional, freely distributable by all */
/* channels. */
/* Public -- public-domain product, no copyright retained, */
/* freely distributable, useable, modifiable. */
/* Retired -- used in a VENDINFO-only distribution package, */
/* to request removal of previous version(s). */
/* TestVersion -- Test version of product, further */
/* distribution not allowed. */
/*-----------------------------------------------------------------*/
#define vivGenlTypeCommercial 0
#define vivGenlTypeCommercialDist 1
#define vivGenlTypeShareRegistered 2
#define vivGenlTypeShareRegDist 3
#define vivGenlTypeShareRestricted 4
#define vivGenlTypeShareUnlimited 5
#define vivGenlTypeCopyrUnlimFree 6
#define vivGenlTypeDemo 7
#define vivGenlTypePublic 8
#define vivGenlTypeRetired 9
#define vivGenlTypeTestVersion 10
#define vivGenlTypeCount 11
/* General Section (cont.) */
/*------ channel-independent flags (see genl.viGenlMiscFlags) -----*/
/* vidGenlMiscFlags contains various binary flags representing */
/* policies applicable to the product across all distribution */
/* channels. Definitions are: */
/* GeogOnlyUS -- distribution outside the United States is */
/* illegal because product includes encryption */
/* technology that cannot be exported (any */
/* other geographical restrictions are placed */
/* in vidGenlGeogText). */
/* PkgNoMods -- no modifications whatever are permitted to */
/* the compressed package as released by the */
/* author/publisher. */
/* FilesNoMods -- while addition of files may be allowed, no */
/* modifications or deletions of the original */
/* files are allowed. */
/* HelpGoSeparate -- Help files, GO.BAT, etc. may be added. */
/* AdsSeparate -- advertisements may be added, but only as */
/* separate files. */
/* AdsAppended -- advertisements may be appended to the */
/* author's original documentation files, but */
/* the files must otherwise remain unchanged. */
/* Install -- a different installation program or procedure */
/* may be substituted or added. */
/* InstallSeeText -- must see human-readable portion of */
/* VENDINFO record for additional constraints */
/* on installation changes. */
/* Compress -- a different compression program can be used */
/* to repackage the files in this package. */
/* CompressInternal -- internal compressed files may be */
/* recompressed, as well. */
/* CompressSeeText -- must see human-readable portion of */
/* VENDINFO record for additional constraints */
/* on compression changes. */
/* GroupSim -- product can be distributed in a single */
/* package with other similar products, as in */
/* PsL's megadisks. */
/* GroupSimPerm -- written permission is required for such */
/* distribution. */
/* GroupSimSeeText -- must see human-readable portion of */
/* VENDINFO record for additional constraints */
/* on such distribution. */
/* GroupDis -- product can be distributed in a single */
/* package with other dis-similar products, as */
/* in a "starter set". */
/* GroupDisPerm -- written permission is required for such */
/* distribution. */
/* GroupDisSeeText -- must see human-readable portion of */
/* VENDINFO record for additional constraints */
/* on such distribution. */
/*-----------------------------------------------------------------*/
#define vibGenlMiscGeogOnlyUS 0x00000001 /* gmu b */
#define vibGenlMiscPkgNoMods 0x00000002 /* gmp b */
#define vibGenlMiscFilesNoMods 0x00000004 /* gmf b */
#define vibGenlMiscHelpGoSeparate 0x00000008 /* gmhs b */
#define vibGenlMiscAdsSeparate 0x00000010 /* gmas b */
#define vibGenlMiscAdsAppended 0x00000020 /* gmaa b */
#define vibGenlMiscInstall 0x00000040 /* gmi b */
#define vibGenlMiscInstallSeeText 0x00000080 /* gmit b */
#define vibGenlMiscCompress 0x00000100 /* gmc b */
#define vibGenlMiscCompressInternal 0x00000200 /* gmci b */
/* General Section (cont.) */
#define vibGenlMiscCompressSeeText 0x00000400 /* gmct b */
#define vibGenlMiscGroupSim 0x00000800 /* gms b */
#define vibGenlMiscGroupSimPerm 0x00001000 /* gmsp b */
#define vibGenlMiscGroupSimSeeText 0x00002000 /* gmst b */
#define vibGenlMiscGroupDis 0x00004000 /* gmd b */
#define vibGenlMiscGroupDisPerm 0x00008000 /* gmdp b */
#define vibGenlMiscGroupDisSeeText 0x00010000 /* gmdt b */
#define vivGenlMiscCount 17
/*****************************/
/* Distribution Section */
/*****************************/
/*=================================================================*/
/* (channel-specific) Distribution Section */
/*=================================================================*/
/*------------------------------------- typedef viSectDistrib -----*/
/* For each defined distribution channel, one of these structures */
/* specifies the distribution requirements of the product. */
/*-----------------------------------------------------------------*/
#define vivDistDataCount 6
typedef struct {
long vidDistFlags; /* d?m? b */
word vidDistData [ vivDistDataCount ]; /* d?d? */
char vidDistAddlReqs [ vivLenMisc1 ]; /* d?a s */
} viSectDistrib; /* 36 fields, 97 bytes */
/*----------------- distribution types/channels (see dist[i]) -----*/
/* The distribution channels currently defined are: */
/* Bbs -- to End User by BBS */
/* Fdn -- to BBSes by File-Distribution Network */
/* DiskVend -- to End User by Mail-Order Disk Vendor */
/* Cdrom -- by CD-ROM (other than File-Distribution Network) */
/* OneRack -- to End User by Single-Site Rack */
/* Rack -- to Seller by Rackware Distributor */
/* Book -- to End User in Book Enclosure Diskette */
/* Subscrip -- to End User by Subscription Service */
/* Magazine -- to End User by Magazine "Cover" Disk */
/* Broadcast -- to End User by TV/Cable/Satellite Broadcast */
/* Phone900 -- to End User by 1-900-Type Phone Service */
/* Install -- Installation by Distributor on User's Machine */
/* Undesc -- Distribution by Substantially Different Means */
/*-----------------------------------------------------------------*/
#define vivDistChanBbs 0 /* db... */
#define vivDistChanFdn 1 /* df... */
#define vivDistChanDiskVend 2 /* dd... */
#define vivDistChanCdrom 3 /* dc... */
#define vivDistChanOneRack 4 /* do... */
#define vivDistChanRack 5 /* dr... */
#define vivDistChanBook 6 /* dk... */
#define vivDistChanSubscrip 7 /* ds... */
#define vivDistChanMagazine 8 /* dm... */
#define vivDistChanTvBroadcast 9 /* dt... */
#define vivDistChanPhone900 10 /* dp... */
#define vivDistChanInstall 11 /* di... */
#define vivDistChanUndesc 12 /* du... */
#define vivDistChanCount 13
/*----------------------- specific-channel distribution flags -----*/
/* vidDistFlags records a set of boolean values indicating */
/* various distribution policies for a particular distribution */
/* channel. The overall approach taken here is to allow the */
/* author to specify the following, in order: */
/* 1. Who falls in the "qualifying" distributor set? */
/* 2. What actions remove a distributor from the "qualifiers"? */
/* 3. Do qualifiers still require written permission, or can */
/* they distribute the product based on being qualifiers? */
/* 4. If qualifiers need no written permission, are other */
/* distributors allowed to distribute WITH PERMISSION, or */
/* are they prohibited from distributing altogether? */
/* (The point of this question is to help a non-qualifying */
/* distributor know whether to review a product and request */
/* permission, or to ignore the product altogether.) */
/* Distribution Section (cont.) */
/* Definitions are: */
/* Prohib -- Distribution via this channel is prohibited. */
/* Any -- Any distributor falls in the "qualifying" set (but */
/* may still drop out of that group if */
/* engaged in disqualifying actions.) */
/* AnyAsp -- Any distributor who is an ASP member (in the */
/* membership class relevant this channel) */
/* qualifies. The point of this choice is */
/* that ASP distributor members agree to */
/* certain advertising and business practices */
/* (and are monitored for compliance), and */
/* some authors (ASP members or not) therefore */
/* grant permission to these distributors */
/* without further investigation. */
/* AnyDisclose -- Any distributor qualifies if he agrees to */
/* inform customer: (1) that product is */
/* shareware, (2) what shareware is, (3) that */
/* he claims no ownership rights in the */
/* product, and (4) that separate payment is */
/* required if product is used other than for */
/* author-specified evaluation period. */
/* AnyUG -- Any user group qualifies. */
/* AnyNonProfUG -- Any non-profit user group qualifies. */
/* AnyConsult -- Any consultant, who charges user for software */
/* evaluation and installation services, */
/* qualifies. */
/* AnyHardware -- Any hardware dealer, who charges user for */
/* hardware and installs product on it, */
/* qualifies. */
/* AnyRecFromAuth -- Any distributor who has received the */
/* product directly from the author, or in a */
/* mailing done by the author's direct agent, */
/* qualifies. */
/* NoIfAnyCharge -- A distributor is disqualified if he */
/* charges the customer in any way. */
/* NoIfPerYear -- A distributor is disqualified if he charges */
/* a subscription fee exceeding the rate in */
/* vivDistDataPerYear. */
/* NoIfPerProg -- A distributor is disqualified if he charges */
/* more per program than the rate in */
/* vivDistDataPerProg. */
/* NoIfPer360K -- A distributor is disqualified if he charges */
/* by diskette, connect time hour, or other */
/* volume measure, more than the rate */
/* in vivDistDataPer360K. */
/* NoIfPerCdrom -- A distributor is disqualified if he charges */
/* more for the CD-ROM on which product is */
/* being distributed than the rate in */
/* vivDistDataPerCdrom. */
/* NoIfBbsMailDisk -- Distribution by this (BBS) channel is */
/* prohibited if sysop mails disk in lieu of */
/* download. */
/* NoIfCdrom -- Distribution by this channel is prohibited if */
/* done by CD-ROM (FDN channel only). */
/* NoIfOtherMass -- Distribution by this channel is prohibited */
/* if done by mass medium other than CD-ROM, */
/* such as bulk tape (FDN channel only). */
/* Distribution Section (cont.) */
/* NoIfTargetBbs -- Distribution by this (CD-ROM) channel is */
/* prohibited if the CD-ROM is targetted at */
/* BBS Sysops (e.g., set up to support */
/* mounting of CD-ROM on BBS, marketed to */
/* Sysops, etc.) */
/* NoIfTargetDistrib -- Distribution by this (CD-ROM) channel */
/* is prohibited if the CD-ROM is targetted at */
/* shareware distributors (e.g., "vendor in a */
/* box" kits, retail-store vending machines, */
/* etc.) */
/* NoIfTargetBbs -- Distribution by this (CD-ROM) channel is */
/* prohibited if the CD-ROM is targetted at */
/* End Users. */
/* PermIfQual -- Distributors in "qualifying" set must still */
/* have written permission. */
/* PermIfDisqual -- Distributors not in qualifying set may */
/* still distribute product if they obtain */
/* written permission. Please note that the */
/* author ALWAYS has the right to allow a */
/* distribution by written permission, */
/* regardless of the restrictions in the */
/* VENDINFO record. This field is here to */
/* help the "non-qualifying" distributor */
/* determine whether or not it's worth the */
/* trouble to request written permission. */
/* NoIfDisqual -- Distributors not in qualifying set are not */
/* allowed to distribute by this channel. */
/* This field is actually redundant, but is in */
/* the record to remove any possible ambiguity */
/* regarding distribution rights. */
/* HiDensRequired -- Distribution on diskette may be done only */
/* on high-density diskettes. */
/* NotifVersRequired -- Distributor who is operating without */
/* written permission must notify author / */
/* publisher of distribution and indicate the */
/* version being distributed. */
/* SampleRequired -- Distributor who is operating without */
/* written permission must send an appropriate */
/* sample of the distributed product to the */
/* author. For mail-order disk vendors, this */
/* means a copy of the catalog in which the */
/* product is listed; for distribution by */
/* other means it is a copy of the actual */
/* material distributed, such as the rack */
/* package, CD-ROM, magazine, book, etc. */
/* SampleRequested -- Author requests, but does not require, */
/* a sample as described above. */
/* Royalty -- When distribution is done via this channel, a */
/* royalty payment is required. See royalty */
/* information in the General section for more */
/* information about royalty amounts or */
/* procedure. */
/* HasContactDate -- There is a date (vivDistDataContactDate) */
/* beyond which distributor must check with */
/* author for current version before */
/* distributing by this channel. */
/* HasProhibDate -- There is a date beyond which distribution */
/* of this version by this channel is not */
/* allowed. */
/* HasAddlReqs -- There are additional requirements governing */
/* distribution by this channel, in the */
/* vidDistAddlReqs field. */
/* Distribution Section (cont.) */
/* SeeText -- There are additional requirements governing */
/* distribution by this channel in the human- */
/* readable portion of the VENDINFO.DIZ file. */
/*-----------------------------------------------------------------*/
#define vibDistProhib 0x00000001 /* d?mp b */
#define vibDistAny 0x00000002 /* d?ma b */
#define vibDistAnyAsp 0x00000004 /* d?maa b */
#define vibDistAnyDisclose 0x00000008 /* d?mad b */
#define vibDistAnyUG 0x00000010 /* d?mau b */
#define vibDistAnyNonProfUG 0x00000020 /* d?man b */
#define vibDistAnyConsult 0x00000040 /* d?mac b */
#define vibDistAnyHardware 0x00000080 /* d?mah b */
#define vibDistAnyRecFromAuth 0x00000100 /* d?mar b */
#define vibDistNoIfAnyCharge 0x00000200 /* d?mna b */
#define vibDistNoIfPerYear 0x00000400 /* d?mny b */
#define vibDistNoIfPerProg 0x00000800 /* d?mnp b */
#define vibDistNoIfPer360K 0x00001000 /* d?mnk b */
#define vibDistNoIfPerCdrom 0x00002000 /* d?mnc b */
/*----- The following fields are channel-specific, and are --------*/
/*----- allowed to have overlapping values --------*/
#define vibDistNoIfBbsMailDisk 0x00004000 /* d?mnm b */
#define vibDistNoIfCdrom 0x00004000 /* d?mnr b */
#define vibDistNoIfOtherMass 0x00008000 /* d?mno b */
#define vibDistNoIfTargetBbs 0x00004000 /* d?mnb b */
#define vibDistNoIfTargetDistrib 0x00008000 /* d?mng b */
#define vibDistNoIfTargetUser 0x00010000 /* d?mnu b */
#define vibDistPermIfQual 0x00020000 /* d?mpq b */
#define vibDistPermIfDisqual 0x00040000 /* d?mpd b */
#define vibDistNoIfDisqual 0x00080000 /* d?mnd b */
#define vibDistHiDensRequired 0x00100000 /* d?mh b */
#define vibDistNotifVersRequired 0x00200000 /* d?mv b */
#define vibDistSampleRequired 0x00400000 /* d?msr b */
#define vibDistSampleRequested 0x00800000 /* d?msq b */
#define vibDistRoyalty 0x01000000 /* d?mr b */
#define vibDistHasContactDate 0x02000000 /* d?mdc b */
#define vibDistHasProhibDate 0x04000000 /* d?mdp b */
#define vibDistHasAddlReqs 0x08000000 /* d?maq b */
#define vibDistSeeText 0x10000000 /* d?mst b */
/* Distribution Section (cont.) */
/*------------------specific-channel distribution data fields -----*/
/* These constants indicate the meanings of the variables in the */
/* vidData array. Definitions are: */
/* PerYear -- subscription of membership charge made by */
/* distributor to user, calculated on annual */
/* basis no matter how charged, and expressed */
/* in U.S. dollars. */
/* PerProg -- charge made by distributor for individual */
/* product, in U.S. dollars. */
/* Per360K -- charge made by distributor to user by volume */
/* of information conveyed, such as per */
/* diskette or per download hour, calculated */
/* on the basis of 360K units no matter how */
/* charged, and expressed in U.S. dollars. */
/* PerCdrom -- retail price of CD-ROM on which program is */
/* distributed, in U.S. dollars. */
/* ContactDate -- date after which distributor must contact */
/* author for new version, or to verify that */
/* this version is current, before initiating */
/* any distribution of this product. */
/* ProhibDate -- date after which all distribution of this */
/* version by the indicated channel is */
/* prohibited. */
/*-----------------------------------------------------------------*/
#define vivDistDataPerYear 0 /* d?dy p */
#define vivDistDataPerProg 1 /* d?dp p */
#define vivDistDataPer360K 2 /* d?dk p */
#define vivDistDataPerCdrom 3 /* d?dc p */
#define vivDistDataContactDate 4 /* d?dt s */
#define vivDistDataProhibDate 5 /* d?dd s */
/************************************/
/* VENDINFO Main Record Structure */
/************************************/
/*---------------------------------- typedef viVendinfoRecord -----*/
/* This is the fixed-length portion of the compressed data */
/* record in VENDINFO.DIZ. It contains sections corresponding */
/* to the various major categories of information in the record, */
/* and ends with a single byte that indicates the type, if any, */
/* of the first record extension. */
/*-----------------------------------------------------------------*/
typedef struct {
viSectHeader head; /* 11 fields, 45 bytes */
viSectProduct prod; /* 100 fields, 4315 bytes */
viSectAuthor auth; /* 25 fields, 797 bytes */
viSectOrder ordr; /* 45 fields, 912 bytes */
viSectPrices pric; /* 96 fields, 488 bytes */
viSectSupport supp; /* 16 fields, 724 bytes */
viSectGeneral genl; /* 25 fields, 573 bytes */
viSectDistrib dist [ vivDistChanCount ]; /* 468 fields, 1261 bytes */
byte vidRecExtensionType; /* 1 byte */
} viVendinfoRecord; /* 786 fields, 9116 bytes */
/****************************************/
/* Extensions to VENDINFO Main Record */
/****************************************/
/*--------------------------- record extension identifiers () -----*/
/* The last byte of the fixed-length data record is a record */
/* extension indicator. If its value is zero, the data record */
/* has no extensions. Otherwise, the byte represents the type of */
/* the first extension record, which begins in the next byte. */
/* Each extension record is of fixed length, followed by a single */
/* byte which is once again a record extension indicator. By */
/* this means, any number of extensions, of potentially varying */
/* types, are possible. At present, the only extension type is */
/* that concerned with defining a distributor for a specific */
/* geographical region. */
/*-----------------------------------------------------------------*/
#define vivRecExtensionNone 0
#define vivRecExtensionRegionalDist 1
/*------------------------------------ typedef viRegionalDist -----*/
/* Multiple instances of this record can appear as record */
/* extensions to the VENDINFO fixed-length data record. Each of */
/* these represents information about a distributor authorized by */
/* the author to represent the product (usually, but not always, */
/* in a specific geographical area). These arrangements need not */
/* be exclusive. The point is to make contact information */
/* available to potential customers (and perhaps other */
/* distributors, if applicable) in the region. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidRegionCovered [ vivLenAddress ]; /* r?r s */
char vidRegionAddress [ 6 ] [ vivLenAddress ];/* r?a t */
char vidRegionPhoneTollFree [ vivLenPhone ]; /* r?t s */
char vidRegionPhone [ vivLenPhone ]; /* r?p s */
char vidRegionFax [ vivLenPhone ]; /* r?f s */
byte vidRegionMiscFlags; /* vibRegion... */ /* r?m? b */
word vidRegionCredit; /* Order vibCredit...*/ /* r?c? b */
long vidRegionFunds; /* Order vibPay... */ /* r?x? b */
char vidRegionCurrency [ vivLenCurrency ]; /* r?c s */
Price vidRegionPrice[2]; /* min, max */ /* r?i? p */
Price vidRegionPriceShip [ vivPriceShipCount]; /* r?s? p */
/* see vivPriceShip... */
byte vidRecExtensionType;
} viRegionalDist; /* 41 fields, 342 bytes */
/*--------------------------------- regional distributor info -----*/
/* vidRegionMiscFlags contains several boolean variables defining */
/* specific aspects of the service provided by the regional */
/* distributor in his defined geographical region. */
/*-----------------------------------------------------------------*/
#define vibRegionHandlesSupport 0x0001 /* r?ms b */
#define vibRegionHandlesSoleSupport 0x0002 /* r?mo b */
#define vibRegionHandlesOtherDist 0x0004 /* r?md b */
#define vibRegionHandlesPress 0x0008 /* r?mj b */
#define vibRegionAuthorDropShips 0x0010 /* r?ma b */
#define vibRegionEnableCreditFunds 0x0020 /* r?mc b */
#define vibRegionEnablePrices 0x0040 /* r?mp b */
/***************************************/
/* VENDINFO Secondary File Structure */
/***************************************/
/*-------------------------------------- typedef viSectHeader -----*/
/* Secondary VENDINFO records contain an abbreviated human- */
/* readable text portion (as discussed earlier). Record */
/* extensions are omitted. The entire fixed-length VENDINFO */
/* record is included, in its usual, compressed form. This */
/* allows automated processing of the individual distribution */
/* packages independently of one another, while eliminating most */
/* of the truly redundant information from the secondary records. */
/*-----------------------------------------------------------------*/
/******************************************/
/* VENDINFO Executable Record Structure */
/******************************************/
/*------------------------------- executable record structure -----*/
/* This whole area is still under development. The following is */
/* strictly a DRAFT, intended to convey the basic idea, and to */
/* allow comment. It will be modified and finalized in a later */
/* version of this standard. */
/* */
/* This is a short VENDINFO record that can optionally be added */
/* to executable programs. It is created by the editor, and */
/* either appended by the editor or output in source-includable */
/* form. The processor can scan executables for the presence of */
/* such records, and can detect some types of inappropriate or */
/* illegal distributions. There is also a security feature that */
/* allows the executable record to provide an extra layer of */
/* security for the VENDINFO.DIZ record. Since the executable */
/* record is INSIDE any security provided for the executable */
/* program itself (e.g., a CRC check), this can be a substantial */
/* form of protection against hacking or elimination of the */
/* VENDINFO record itself, at a cost of four bytes. */
/* */
/* There are three different forms of the VENDINFO executable */
/* record. There is a basic record, present in all cases. Then, */
/* for products in the "Shareware, Restricted Distribution" */
/* category, there is an additional section containing the */
/* product's channel-specific distribution restrictions. This */
/* second portion of the record can have either a very brief form */
/* or a complete form, at the discretion of the author. */
/*-----------------------------------------------------------------*/
/*-------------------------------- typedef viExePrimaryRecord -----*/
/* This portion of the record is always present. The last part */
/* of this record contains four character strings. Those strings */
/* are actually stored in byte-count-first form, and must be */
/* extracted from the record dynamically. They are shown below */
/* (in a comment) as if they were fixed-length fields, just to */
/* make clear their meanings and length limits. As a concrete */
/* example, the product name "InContext" would be stored starting */
/* in the next byte after vidExeAuthentKeyVI, and would take 10 */
/* bytes. The first byte would be the length of the string (9) */
/* and the remaining 9 bytes would contain the string itself, */
/* with no terminating null. */
/* */
/* The vidExeType field actually contains several pieces of type */
/* and status information. It is a byte whose bit structure is: */
/* 76543210 */
/* x....... For shareware with distribution restrictions, */
/* this bit indicates that the long version of the */
/* distribution policy is included. */
/* .x...... This bit indicates that this executable is not */
/* to be distributed without an accompanying */
/* VENDINFO.DIZ file. */
/* ..x..... This bit indicates that this VENDINFO record */
/* contains an authenticity key identifying the */
/* accompanying VENDINFO.DIZ file. */
/* ...xxxxx These bits indicate the product distribution */
/* category in which this executable falls, as */
/* outlined in the vidGenlDistType field in the */
/* main VENDINFO record. */
/* VENDINFO Executable Record Structure (cont.) */
/* NOTE: if the author wishes to use an "executable branding" */
/* scheme, to mark an evaluation version as registered when the */
/* user enters a valid registration number, s/he need only change */
/* the *5-bit* value of the distribution category field to */
/* vivGenlTypeShareRegistered. Programs that interpret VENDINFO */
/* records are required to correctly handle such records, even if */
/* the remainder of the executable record is that normally seen */
/* only for products in the vivGenlTypeShareRestricted category. */
/* The author should make appropriate corrections for any CRC */
/* or other security schemes protecting the executable. Note */
/* also that the first three bits of the vidExeType field */
/* should not be altered. */
/*-----------------------------------------------------------------*/
typedef struct {
char vidExeViString[12];
word vidExeViVersion;
byte vidExeType;
Date vidExeVersionDate;
long vidExeCrc;
long vidExeUserId;
long vidExeAuthentKey1;
long vidExeAuthentKey2;
long vidExeAuthentKeyVI;
char vidExeProdName[16];
char vidExeVersion[5];
char vidExeCompanyName[41];
char vidExeQueriesPhone[20];
} viExePrimaryRecord; /* 119 bytes */
/*--------------------------------- typedef viExeDistribShort -----*/
/* The brief version of the distribution record contains only a */
/* single bit of information for each distribution channel. */
/* That bit is obtainined by ORing the values, for the channel in */
/* question, of vibDistProhib and vibDistPermIfQual. Thus, the */
/* the bit is set if distribution is prohibited for the channel */
/* or if all qualifying distributors are still required to */
/* obtain written permission. The meaning of this bit is thus: */
/* if you have written permission from the author, it's OK to */
/* distribute by this channel; otherwise, it's not. If this bit */
/* is *not* set, then it's simply not possible to determine from */
/* this abbreviated information whether or not distribution is */
/* OK. In order to convey substantially more detail about the */
/* permissions, a good deal more information is needed, so */
/* there's not a clearly useful alternative short of the full */
/* distribution record. Most authors will probably choose the */
/* long version, but this version is provided for those highly */
/* concerned about the amount of information added to the */
/* executable record. */
/*-----------------------------------------------------------------*/
typedef struct {
word vidExeDistChanPermReqd;
} viExeDistribShort; /* 2 bytes */
/* VENDINFO Executable Record Structure (cont.) */
/*---------------------------------- typedef viExeDistribLong -----*/
/* The long version of the distribution record contains all the */
/* information in the distribution section of the main record, */
/* and the information is laid out in the same order. However, */
/* the record is abbreviated because missing values are excluded, */
/* and because strings, when present, are in byte-count-first */
/* format. Specifically, the information about each channel */
/* appears together, in the order indicated in viSectDistrib. */
/* However, the six data values (vidDistData) and the */
/* vidDistAddlReqs string appear only if the corresponding bits */
/* (vibDistNoIfPerYear, vibDistNoIfPerProg, vibDistNoIfPer360K, */
/* vibDistNoIfPerCdrom, vibDistHasContactDate, */
/* vibDistHasProhibDate, vibDistHasAddlReqs) are on. */
/*-----------------------------------------------------------------*/
typedef struct {
viSectDistrib dist [ vivDistChanCount ];
} viExeDistribLong; /* 1261 bytes */
/*****************************/
/* Distribution Flag Masks */
/*****************************/
/*----------------------------------- distribution flag masks -----*/
/* These words contain OR'd flags defining the applicability of */
/* the distribution flags to the various distribution types. For */
/* example, the "vidDistAnyConsult" flag is relevant to direct */
/* installation of the product on the user's machine, but not to */
/* BBS distribution. Tools that create or use VENDINFO.DIZ files */
/* are required to use these masks to eliminate from */
/* consideration any distribution flags that do not apply to the */
/* particular channel. */
/* */
/* For clarity, the definitions of these flag masks are organized */
/* in the following way, by line: */
/* Prohibited */
/* Qualifiers */
/* Disqualifiers */
/* Permission applicability */
/* Hi-density/notification/catalog requirements */
/* Royalties */
/* Dates */
/* Additional requirements */
/*-----------------------------------------------------------------*/
EXTERN long vidDistFlagMasks [ vivDistChanCount ]
#ifdef VENDINFO_MAIN
= {
/* BBS */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
vibDistNoIfAnyCharge + vibDistNoIfPerYear + vibDistNoIfPerProg +
vibDistNoIfPer360K + vibDistNoIfBbsMailDisk +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
0 +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* BBS file-distribution net */
vibDistProhib +
vibDistAny + vibDistAnyRecFromAuth +
vibDistNoIfCdrom + vibDistNoIfOtherMass +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
0 +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* mail-order disk vendor */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* Distribution Flag Masks (cont.) */
/* CD-ROM other than BBS file-distribution network */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
vibDistNoIfPerCdrom +
vibDistNoIfTargetBbs + vibDistNoIfTargetDistrib +
vibDistNoIfTargetUser +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired + vibDistSampleRequired +
vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* one-site rack vendor */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* rack distributor */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* book enclosure */
vibDistProhib +
vibDistAny + vibDistAnyRecFromAuth +
0 +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* subscription service */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
vibDistNoIfPerYear + vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* Distribution Flag Masks (cont.) */
/* magazine cover disk */
vibDistProhib +
vibDistAny + vibDistAnyRecFromAuth +
0 +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistHiDensRequired + vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* broadcast by TV/cable/satellite/etc. */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* 1-900 phone-type service */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
vibDistNoIfPerProg + vibDistNoIfPer360K +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* installation on user's machine by paid consultant, VAR, etc. */
vibDistProhib +
vibDistAny + vibDistAnyDisclose + vibDistAnyConsult +
vibDistAnyHardware + vibDistAnyRecFromAuth +
0 +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText,
/* distribution by substantially different method */
vibDistProhib +
vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
vibDistAnyRecFromAuth +
0 +
vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
vibDistNotifVersRequired +
vibDistSampleRequired + vibDistSampleRequested +
vibDistRoyalty +
vibDistHasContactDate + vibDistHasProhibDate +
vibDistHasAddlReqs + vibDistSeeText
}
#endif
;
#endif /* __VENDINFO_H */
/****************************************/
/* Standards Applicable to Programs */
/* that Create or Use VENDINFO Records */
/****************************************/
/*------------------------------------------- tools standards -----*/
/* This standard is mainly about the file format for VENDINFO.DIZ */
/* files, with minor additional record-format information. It is */
/* also important, though, to establish some common understand- */
/* ings about tools. In some cases, these understandings serve */
/* to clarify the division of responsibility between tools that */
/* create VENDINFO records and tools that use them. In other */
/* cases, these tools standards specify tools behavior necessary */
/* to support the mutual understandings of the authors and the */
/* distributors who use the VENDINFO system. */
/* */
/* Software developers who create tools that use VENDINFO records */
/* can automatically satisfy most of these requirements by using */
/* the standard VENDINFO software developer's library. */
/* */
/* This section is still under development, and will probably */
/* be expanded in the final version. */
/*-----------------------------------------------------------------*/
/*------------------------------------------------ null bytes -----*/
/* Tools that create VENDINFO records are required to place a */
/* null value (0x00) in all unused bytes of the compressed */
/* VENDINFO data record, in order to maximize the degree to which */
/* the record can be compressed. This means, for example, that a */
/* fixed-length string field would have a null byte indicating */
/* the termination of the string, and additional null bytes as */
/* necessary to fill out the string to its full, fixed length. */
/* This also means that the default value for unused fields will */
/* be all zeroes. */
/*-----------------------------------------------------------------*/
/*-------------------------------------------- implied values -----*/
/* Wherever a value in one field implies a particular value for */
/* another field, it is the responsibility of the creation tool, */
/* and not the processing tool, to fill the second field with */
/* that value. For example, if the value of the vibDistAny bit */
/* is TRUE for a given distribution channel, the editor will also */
/* set to TRUE the values of the vibDistAnyAsp bit, the */
/* vibDistAnyDisclose bit, etc., since these values are implied. */
/*-----------------------------------------------------------------*/
/*-------------------------------------- equal values if same -----*/
/* Whenever there is a provision for multiple sets of similar */
/* values (minimum/maximum, minimum/full, required/recommended, */
/* etc.), all values will be filled in in both sets, even if the */
/* second set can be seen to be inapplicable. For example, if */
/* there is only one registration price for a shareware product, */
/* both the minimum and maximum viRegPkg structures will be */
/* filled in, using identical values. */
/*-----------------------------------------------------------------*/
/*--------------------------------------------- known version -----*/
/* The VENDINFO file structure may change from version to */
/* version. Any processing tool is required to check the version */
/* field, and to make no attempt to use the record if the version */
/* is not "known" to the processor. An error message and a */
/* distinct return code are recommended in most cases. */
/*-----------------------------------------------------------------*/
/* Standards Applicable to Programs (cont.) */
/*-------------------------- testing for allowed distribution -----*/
/* Any program which evaluates the author's distribution policy */
/* for a particular channel is required to employ the following */
/* algorithm: */
/* */
/* 1. Apply the channel's Distribution Flag Mask to that */
/* channel's vidDistFlags field, eliminating from all */
/* consideration those bits that do not apply to the */
/* channel in question. (Also, editors that create the */
/* record are required to apply this mask, insuring that */
/* all irrelevant bits are set FALSE.) */
/* */
/* 2. Determine whether or not the distributor "qualifies", */
/* based upon the distributor's explicit statements about */
/* the proposed distribution. No assumptions are allowed */
/* here. For example, in order to qualify via the */
/* vibDistAnyDisclose approach, the distributor must */
/* separately specify satisfaction of each of the defining */
/* conditions (e.g., claims no ownership of product). */
/* */
/* 3. If the distributor "qualifies", test all the disqualify- */
/* ing conditions specified by the author against the */
/* distributor's explicit statements about the proposed */
/* distribution. No assumptions are allowed here. For */
/* example, if the author has specified a limit on */
/* subscription fees (vivDistNoIfPerYear), the distributor */
/* can satisfy this requirement only by specifying the */
/* amount (even if zero) that s/he actually charges per */
/* year. */
/* */
/* 4. If the proposed distribution still meets the */
/* "qualifying" requirements, determine whether or not */
/* written permission is still required; if the proposed */
/* distribution lies outside the qualifying requirements, */
/* determine whether or not the distribution is still */
/* possible given written permission. If either of these */
/* conditions applies and the distributor has not */
/* indicated that s/he has written permission, report the */
/* requirement for written permission. */
/* */
/* 5. In addition to any unsatisfied conditions reported as a */
/* result of the preceding steps, report any additional */
/* author conditions (e.g., notification required) that */
/* cannot be seen to be inapplicable based on the explicit */
/* statements by the distributor. */
/*-----------------------------------------------------------------*/
/*------------------------------- verification of information -----*/
/* Any tool that creates VENDINFO records is required to provide */
/* an active verification mechanism which gives feedback to the */
/* author about the choices selected, and provides an opportunity */
/* to notice unintended choices or consequences. This feature is */
/* intended to increase the confidence with which a distributor */
/* can use the resulting VENDINFO information, and to reduce */
/* errors by authors. This mechanism may take various forms: */
/* verification step in an interactive editor, a batch procedure */
/* that prints out the file contents and is well documented and */
/* recommended so the author is aware of the need to perform it, */
/* etc. */
/*-----------------------------------------------------------------*/
/* Standards Applicable to Programs (cont.) */
/*---------------------------------- authentication of record -----*/
/* Any tool that processes VENDINFO records is required to test */
/* the records for correct CRC values, authenticity, etc., and to */
/* report failures in a detectable way, unless the user has */
/* explicitly chosen to suppress such testing. */
/*-----------------------------------------------------------------*/
/*------------------------------------- other tools standards -----*/
/* Standards for tools are also mentioned here and there through- */
/* out the file-format portion of this standard. */
/*-----------------------------------------------------------------*/